Dates

Le module Dates fournit deux types pour travailler avec des dates : Date et DateTime, représentant respectivement la précision au jour et à la milliseconde ; les deux sont des sous-types de l'abstrait TimeType. La motivation pour des types distincts est simple : certaines opérations sont beaucoup plus simples, tant en termes de code que de raisonnement mental, lorsque les complexités d'une plus grande précision n'ont pas à être prises en compte. Par exemple, puisque le type 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 ne se résout qu'à la précision d'une seule date (c'est-à-dire sans heures, minutes ou secondes), les considérations normales pour les fuseaux horaires, l'heure d'été et les secondes intercalaires sont inutiles et évitées.

Les types Date et DateTime sont essentiellement des wrappers immuables Int64. Le champ unique instant de l'un ou l'autre type est en réalité un type UTInstant{P}, qui représente une chronologie machine en constante augmentation basée sur la seconde UT [1]. Le type 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 n'est pas conscient des fuseaux horaires (naïf, en termes de Python), analogue à un LocalDateTime en Java 8. Une fonctionnalité de fuseau horaire supplémentaire peut être ajoutée via le TimeZones.jl package, qui compile le IANA time zone database. Les types 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 et 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 sont basés sur la norme ISO 8601, qui suit le calendrier grégorien proleptique. Une note est que la norme ISO 8601 est particulière concernant les dates avant notre ère (BC/BCE). En général, le dernier jour de l'ère BC/BCE, le 31-12-1 BC/BCE, a été suivi par le 1-1-1 AD/CE, donc il n'existe pas d'année zéro. Cependant, la norme ISO stipule que 1 BC/BCE est l'année zéro, donc 0000-12-31 est le jour avant 0001-01-01, et l'année -0001 (oui, moins un pour l'année) est 2 BC/BCE, l'année -0002 est 3 BC/BCE, etc.

Constructors

Date et DateTime peuvent être construits par des types entiers ou Period, par analyse, ou par le biais d'ajusteurs (plus d'informations à ce sujet plus tard) :

julia> DateTime(2013)
2013-01-01T00:00:00

julia> DateTime(2013,7)
2013-07-01T00:00:00

julia> DateTime(2013,7,1)
2013-07-01T00:00:00

julia> DateTime(2013,7,1,12)
2013-07-01T12:00:00

julia> DateTime(2013,7,1,12,30)
2013-07-01T12:30:00

julia> DateTime(2013,7,1,12,30,59)
2013-07-01T12:30:59

julia> DateTime(2013,7,1,12,30,59,1)
2013-07-01T12:30:59.001

julia> Date(2013)
2013-01-01

julia> Date(2013,7)
2013-07-01

julia> Date(2013,7,1)
2013-07-01

julia> Date(Dates.Year(2013),Dates.Month(7),Dates.Day(1))
2013-07-01

julia> Date(Dates.Month(7),Dates.Year(2013))
2013-07-01

Date ou DateTime le parsing est accompli par l'utilisation de chaînes de format. Les chaînes de format fonctionnent sur la notion de définir des "emplacements" délimités ou de largeur fixe qui contiennent un point à analyser et en passant le texte à analyser et la chaîne de format à un constructeur 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 ou 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566, de la forme Date("2015-01-01",dateformat"y-m-d") ou DateTime("20150101",dateformat"yyyymmdd").

Les emplacements délimités sont marqués en spécifiant le délimiteur que le parseur doit s'attendre entre deux périodes successives ; ainsi, "y-m-d" indique au parseur qu'entre le premier et le deuxième emplacement dans une chaîne de date comme "2014-07-16", il doit trouver le caractère -. Les caractères y, m et d informent le parseur des périodes à analyser dans chaque emplacement.

Comme dans le cas des constructeurs ci-dessus tels que Date(2013), les DateFormat délimités permettent des parties manquantes de dates et d'heures tant que les parties précédentes sont fournies. Les autres parties reçoivent les valeurs par défaut habituelles. Par exemple, Date("1981-03", dateformat"y-m-d") renvoie 1981-03-01, tandis que Date("31/12", dateformat"d/m/y") donne 0001-12-31. (Notez que l'année par défaut est 1 de notre ère/CE.) Cependant, une chaîne vide lance toujours une ArgumentError.

Les emplacements à largeur fixe sont spécifiés en répétant le caractère point le nombre de fois correspondant à la largeur sans délimiteur entre les caractères. Ainsi, dateformat"yyyymmdd" correspondrait à une chaîne de date comme "20140716". Le parseur distingue un emplacement à largeur fixe par l'absence de délimiteur, notant la transition "yyyymm" d'un caractère point au suivant.

Le support pour l'analyse des mois au format texte est également pris en charge grâce aux caractères u et U, pour les noms de mois abrégés et complets, respectivement. Par défaut, seuls les noms de mois en anglais sont pris en charge, donc u correspond à "Jan", "Feb", "Mar", etc. Et U correspond à "January", "February", "March", etc. Semblable à d'autres fonctions de mappage nom=>valeur dayname et monthname, des locales personnalisées peuvent être chargées en passant le mappage locale=>Dict{String,Int} aux dictionnaires MONTHTOVALUEABBR et MONTHTOVALUE pour les noms de mois abrégés et complets, respectivement.

Les exemples ci-dessus ont utilisé la macro de chaîne dateformat"". Cette macro crée un objet DateFormat une fois lorsque la macro est développée et utilise le même objet DateFormat même si un extrait de code est exécuté plusieurs fois.

julia> for i = 1:10^5
           Date("2015-01-01", dateformat"y-m-d")
       end

Ou vous pouvez créer l'objet DateFormat explicitement :

julia> df = DateFormat("y-m-d");

julia> dt = Date("2015-01-01",df)
2015-01-01

julia> dt2 = Date("2015-01-02",df)
2015-01-02

Alternativement, utilisez la diffusion :

julia> years = ["2015", "2016"];

julia> Date.(years, DateFormat("yyyy"))
2-element Vector{Date}:
 2015-01-01
 2016-01-01

Pour plus de commodité, vous pouvez passer la chaîne de format directement (par exemple, Date("2015-01-01","y-m-d")), bien que cette forme entraîne des coûts de performance si vous analysez le même format plusieurs fois, car elle crée en interne un nouvel objet DateFormat à chaque fois.

En plus des constructeurs, un Date ou DateTime peut être construit à partir de chaînes en utilisant les fonctions parse et tryparse, mais avec un troisième argument optionnel de type DateFormat spécifiant le format ; par exemple, parse(Date, "06.23.2013", dateformat"m.d.y"), ou tryparse(DateTime, "1999-12-31T23:59:59") qui utilise le format par défaut. La différence notable entre les fonctions est qu'avec 4d61726b646f776e2e436f64652822222c202274727970617273652229_40726566, une erreur n'est pas lancée si la chaîne est vide ou dans un format invalide ; à la place, nothing est retourné.

Julia 1.9

Avant Julia 1.9, des chaînes vides pouvaient être passées aux constructeurs et à parse sans erreur, retournant respectivement DateTime(1), Date(1) ou Time(0). De même, tryparse ne retournait pas nothing.

Une suite complète de tests et d'exemples de parsing et de formatage est disponible dans stdlib/Dates/test/io.jl.

Durations/Comparisons

Trouver la durée entre deux Date ou DateTime est simple étant donné leur représentation sous-jacente en tant que UTInstant{Day} et UTInstant{Millisecond}, respectivement. La différence entre 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 est renvoyée en nombre de Day, et 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 en nombre de Millisecond. De même, comparer TimeType est une simple question de comparaison des instants machine sous-jacents (qui à son tour compare les valeurs internes Int64).

julia> dt = Date(2012,2,29)
2012-02-29

julia> dt2 = Date(2000,2,1)
2000-02-01

julia> dump(dt)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 734562

julia> dump(dt2)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 730151

julia> dt > dt2
true

julia> dt != dt2
true

julia> dt + dt2
ERROR: MethodError: no method matching +(::Date, ::Date)
[...]

julia> dt * dt2
ERROR: MethodError: no method matching *(::Date, ::Date)
[...]

julia> dt / dt2
ERROR: MethodError: no method matching /(::Date, ::Date)

julia> dt - dt2
4411 days

julia> dt2 - dt
-4411 days

julia> dt = DateTime(2012,2,29)
2012-02-29T00:00:00

julia> dt2 = DateTime(2000,2,1)
2000-02-01T00:00:00

julia> dt - dt2
381110400000 milliseconds

Accessor Functions

Parce que les types Date et DateTime sont stockés en tant que valeurs uniques Int64, les parties ou champs de date peuvent être récupérés via des fonctions d'accès. Les accesseurs en minuscules renvoient le champ sous forme d'entier :

julia> t = Date(2014, 1, 31)
2014-01-31

julia> Dates.year(t)
2014

julia> Dates.month(t)
1

julia> Dates.week(t)
5

julia> Dates.day(t)
31

While propercase return the same value in the corresponding Period type:

julia> Dates.Year(t)
2014 years

julia> Dates.Day(t)
31 days

Les méthodes composées sont fournies car il est plus efficace d'accéder à plusieurs champs en même temps plutôt qu'individuellement :

julia> Dates.yearmonth(t)
(2014, 1)

julia> Dates.monthday(t)
(1, 31)

julia> Dates.yearmonthday(t)
(2014, 1, 31)

On peut également accéder à la valeur sous-jacente UTInstant ou à la valeur entière :

julia> dump(t)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 735264

julia> t.instant
Dates.UTInstant{Day}(Day(735264))

julia> Dates.value(t)
735264

Query Functions

Les fonctions de requête fournissent des informations calendaires sur un TimeType. Elles incluent des informations sur le jour de la semaine :

julia> t = Date(2014, 1, 31)
2014-01-31

julia> Dates.dayofweek(t)
5

julia> Dates.dayname(t)
"Friday"

julia> Dates.dayofweekofmonth(t) # 5th Friday of January
5

Mois de l'année :

julia> Dates.monthname(t)
"January"

julia> Dates.daysinmonth(t)
31

Ainsi que des informations sur l'année et le trimestre de TimeType :

julia> Dates.isleapyear(t)
false

julia> Dates.dayofyear(t)
31

julia> Dates.quarterofyear(t)
1

julia> Dates.dayofquarter(t)
31

Les méthodes dayname et monthname peuvent également prendre un mot-clé locale optionnel qui peut être utilisé pour renvoyer le nom du jour ou du mois de l'année pour d'autres langues/locales. Il existe également des versions de ces fonctions renvoyant les noms abrégés, à savoir dayabbr et monthabbr. D'abord, le mappage est chargé dans la variable LOCALES :

julia> french_months = ["janvier", "février", "mars", "avril", "mai", "juin",
                        "juillet", "août", "septembre", "octobre", "novembre", "décembre"];

julia> french_months_abbrev = ["janv","févr","mars","avril","mai","juin",
                              "juil","août","sept","oct","nov","déc"];

julia> french_days = ["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"];

julia> Dates.LOCALES["french"] = Dates.DateLocale(french_months, french_months_abbrev, french_days, [""]);

Les fonctions mentionnées ci-dessus peuvent ensuite être utilisées pour effectuer les requêtes :

julia> Dates.dayname(t;locale="french")
"vendredi"

julia> Dates.monthname(t;locale="french")
"janvier"

julia> Dates.monthabbr(t;locale="french")
"janv"

Puisque les versions abrégées des jours ne sont pas chargées, essayer d'utiliser la fonction dayabbr générera une erreur.

julia> Dates.dayabbr(t;locale="french")
ERROR: BoundsError: attempt to access 1-element Vector{String} at index [5]
Stacktrace:
[...]

TimeType-Period Arithmetic

Il est bon de se familiariser avec la façon dont l'arithmétique des périodes de date est gérée lors de l'utilisation de tout langage ou cadre de date, car il y a certains tricky issues à traiter (bien que beaucoup moins pour les types de précision jour).

Le module Dates essaie de suivre le principe simple de changer le moins possible lors de l'exécution de l'arithmétique Period. Cette approche est également souvent connue sous le nom d'arithmétique calendrique ou ce que vous devineriez probablement si quelqu'un vous posait la même question lors d'une conversation. Pourquoi tout ce bruit à ce sujet ? Prenons un exemple classique : ajoutez 1 mois au 31 janvier 2014. Quelle est la réponse ? Javascript dira March 3 (suppose 31 jours). PHP dit March 2 (suppose 30 jours). Le fait est qu'il n'y a pas de bonne réponse. Dans le module Dates, il donne le résultat du 28 février. Comment cela se détermine-t-il ? Considérez le classique jeu de hasard 7-7-7 dans les casinos.

Maintenant, imaginez simplement qu'au lieu de 7-7-7, les emplacements sont Année-Mois-Jour, ou dans notre exemple, 2014-01-31. Lorsque vous demandez à ajouter 1 mois à cette date, l'emplacement du mois est incrémenté, donc maintenant nous avons 2014-02-31. Ensuite, le numéro du jour est vérifié s'il est supérieur au dernier jour valide du nouveau mois ; si c'est le cas (comme dans l'exemple ci-dessus), le numéro du jour est ajusté à la baisse au dernier jour valide (28). Quelles sont les conséquences de cette approche ? Allez-y et ajoutez un autre mois à notre date, 2014-02-28 + Mois(1) == 2014-03-28. Quoi ? Vous vous attendiez au dernier jour de mars ? Non, désolé, rappelez-vous les emplacements 7-7-7. Aussi peu d'emplacements que possible vont changer, donc nous incrémentons d'abord l'emplacement du mois de 1, 2014-03-28, et boum, nous avons terminé car c'est une date valide. D'autre part, si nous devions ajouter 2 mois à notre date d'origine, 2014-01-31, alors nous nous retrouvons avec 2014-03-31, comme prévu. L'autre conséquence de cette approche est une perte d'associativité lorsque un ordre spécifique est imposé (c'est-à-dire que l'ajout de choses dans des ordres différents donne des résultats différents). Par exemple :

julia> (Date(2014,1,29)+Dates.Day(1)) + Dates.Month(1)
2014-02-28

julia> (Date(2014,1,29)+Dates.Month(1)) + Dates.Day(1)
2014-03-01

Que se passe-t-il là-bas ? Dans la première ligne, nous ajoutons 1 jour au 29 janvier, ce qui donne 2014-01-30 ; puis nous ajoutons 1 mois, donc nous obtenons 2014-02-30, qui est ensuite ajusté à 2014-02-28. Dans le deuxième exemple, nous ajoutons 1 mois en premier, ce qui nous donne 2014-02-29, qui est ajusté à 2014-02-28, et ensuite nous ajoutons 1 jour, ce qui donne 2014-03-01. Un principe de conception qui aide dans ce cas est que, en présence de plusieurs Périodes, les opérations seront ordonnées par les types des Périodes, et non par leur valeur ou leur ordre positionnel ; cela signifie que Année sera toujours ajouté en premier, puis Mois, puis Semaine, etc. Ainsi, ce qui suit donne effectivement une associativité et fonctionne parfaitement :

julia> Date(2014,1,29) + Dates.Day(1) + Dates.Month(1)
2014-03-01

julia> Date(2014,1,29) + Dates.Month(1) + Dates.Day(1)
2014-03-01

Difficile ? Peut-être. Que doit faire un utilisateur innocent de Dates ? En fin de compte, il faut être conscient que forcer explicitement une certaine associativité, lorsqu'on traite des mois, peut conduire à des résultats inattendus, mais sinon, tout devrait fonctionner comme prévu. Heureusement, c'est à peu près l'étendue des cas étranges dans l'arithmétique des périodes de date lorsqu'on traite du temps en UT (en évitant les "joies" de la gestion de l'heure d'été, des secondes intercalaires, etc.).

En bonus, tous les objets arithmétiques de période fonctionnent directement avec des plages :

julia> dr = Date(2014,1,29):Day(1):Date(2014,2,3)
Date("2014-01-29"):Day(1):Date("2014-02-03")

julia> collect(dr)
6-element Vector{Date}:
 2014-01-29
 2014-01-30
 2014-01-31
 2014-02-01
 2014-02-02
 2014-02-03

julia> dr = Date(2014,1,29):Dates.Month(1):Date(2014,07,29)
Date("2014-01-29"):Month(1):Date("2014-07-29")

julia> collect(dr)
7-element Vector{Date}:
 2014-01-29
 2014-02-28
 2014-03-29
 2014-04-29
 2014-05-29
 2014-06-29
 2014-07-29

Adjuster Functions

Aussi pratique que soit l'arithmétique des périodes de dates, souvent les types de calculs nécessaires sur les dates prennent une nature calendaire ou temporelle plutôt qu'un nombre fixe de périodes. Les jours fériés en sont un parfait exemple ; la plupart suivent des règles telles que "Memorial Day = Dernier lundi de mai", ou "Thanksgiving = 4ème jeudi de novembre". Ces types d'expressions temporelles traitent de règles relatives au calendrier, comme le premier ou le dernier du mois, le mardi prochain, ou les premiers et troisièmes mercredis, etc.

Le module Dates fournit l'API ajusteur à travers plusieurs méthodes pratiques qui aident à exprimer de manière simple et succincte des règles temporelles. Le premier groupe de méthodes d'ajustement concerne le premier et le dernier des semaines, mois, trimestres et années. Chacune d'elles prend un seul TimeType en entrée et retourne ou ajuste à le premier ou le dernier de la période souhaitée par rapport à l'entrée.

julia> Dates.firstdayofweek(Date(2014,7,16)) # Adjusts the input to the Monday of the input's week
2014-07-14

julia> Dates.lastdayofmonth(Date(2014,7,16)) # Adjusts to the last day of the input's month
2014-07-31

julia> Dates.lastdayofquarter(Date(2014,7,16)) # Adjusts to the last day of the input's quarter
2014-09-30

Les deux méthodes d'ordre supérieur suivantes, tonext, et toprev, généralisent le travail avec des expressions temporelles en prenant un DateFunction comme premier argument, ainsi qu'un TimeType de départ. Un DateFunction est simplement une fonction, généralement anonyme, qui prend un seul 4d61726b646f776e2e436f64652822222c202254696d65547970652229_40726566 en entrée et retourne un Bool, true indiquant un critère d'ajustement satisfait. Par exemple :

julia> istuesday = x->Dates.dayofweek(x) == Dates.Tuesday; # Returns true if the day of the week of x is Tuesday

julia> Dates.tonext(istuesday, Date(2014,7,13)) # 2014-07-13 is a Sunday
2014-07-15

julia> Dates.tonext(Date(2014,7,13), Dates.Tuesday) # Convenience method provided for day of the week adjustments
2014-07-15

Ceci est utile avec la syntaxe do-block pour des expressions temporelles plus complexes :

julia> Dates.tonext(Date(2014,7,13)) do x
           # Return true on the 4th Thursday of November (Thanksgiving)
           Dates.dayofweek(x) == Dates.Thursday &&
           Dates.dayofweekofmonth(x) == 4 &&
           Dates.month(x) == Dates.November
       end
2014-11-27

La méthode Base.filter peut être utilisée pour obtenir toutes les dates/moments valides dans une plage spécifiée :

# Pittsburgh street cleaning; Every 2nd Tuesday from April to November
# Date range from January 1st, 2014 to January 1st, 2015
julia> dr = Dates.Date(2014):Day(1):Dates.Date(2015);

julia> filter(dr) do x
           Dates.dayofweek(x) == Dates.Tue &&
           Dates.April <= Dates.month(x) <= Dates.Nov &&
           Dates.dayofweekofmonth(x) == 2
       end
8-element Vector{Date}:
 2014-04-08
 2014-05-13
 2014-06-10
 2014-07-08
 2014-08-12
 2014-09-09
 2014-10-14
 2014-11-11

Des exemples et des tests supplémentaires sont disponibles dans stdlib/Dates/test/adjusters.jl.

Period Types

Les périodes sont une vue humaine de durées de temps discrètes, parfois irrégulières. Considérez 1 mois ; cela pourrait représenter, en jours, une valeur de 28, 29, 30 ou 31 selon le contexte de l'année et du mois. Ou une année pourrait représenter 365 ou 366 jours dans le cas d'une année bissextile. Period types sont de simples Int64 wrappers et sont construits en enveloppant tout type convertible en Int64, c'est-à-dire Year(1) ou Month(3.0). L'arithmétique entre 4d61726b646f776e2e436f64652822222c2022506572696f642229_40726566 du même type se comporte comme des entiers, et une arithmétique Période-Réel limitée est disponible. Vous pouvez extraire l'entier sous-jacent avec Dates.value.

julia> y1 = Dates.Year(1)
1 year

julia> y2 = Dates.Year(2)
2 years

julia> y3 = Dates.Year(10)
10 years

julia> y1 + y2
3 years

julia> div(y3,y2)
5

julia> y3 - y2
8 years

julia> y3 % y2
0 years

julia> div(y3,3) # mirrors integer division
3 years

julia> Dates.value(Dates.Millisecond(10))
10

Représenter des périodes ou des durées qui ne sont pas des multiples entiers des types de base peut être réalisé avec le type Dates.CompoundPeriod. Des périodes composées peuvent être construites manuellement à partir de types simples Period. De plus, la fonction canonicalize peut être utilisée pour décomposer une période en un 4d61726b646f776e2e436f64652822222c202244617465732e436f6d706f756e64506572696f642229_40726566. Cela est particulièrement utile pour convertir une durée, par exemple, une différence de deux DateTime, en une représentation plus pratique.

julia> cp = Dates.CompoundPeriod(Day(1),Minute(1))
1 day, 1 minute

julia> t1 = DateTime(2018,8,8,16,58,00)
2018-08-08T16:58:00

julia> t2 = DateTime(2021,6,23,10,00,00)
2021-06-23T10:00:00

julia> canonicalize(t2-t1) # creates a CompoundPeriod
149 weeks, 6 days, 17 hours, 2 minutes

Rounding

Date et DateTime peuvent être arrondis à une résolution spécifiée (par exemple, 1 mois ou 15 minutes) avec floor, ceil, ou round :

julia> floor(Date(1985, 8, 16), Dates.Month)
1985-08-01

julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:45:00

julia> round(DateTime(2016, 8, 6, 20, 15), Dates.Day)
2016-08-07T00:00:00

Contrairement à la méthode numérique round, qui par défaut favorise les nombres pairs en cas d'égalité, la méthode TimeType4d61726b646f776e2e436f64652822222c2022726f756e642229_40726566 utilise le mode d'arrondi RoundNearestTiesUp. (Il est difficile de deviner ce que signifierait un arrondi à "l'entier pair le plus proche" 4d61726b646f776e2e436f64652822222c202254696d65547970652229_40726566.) Des détails supplémentaires sur les RoundingMode disponibles peuvent être trouvés dans le API reference.

L'arrondi devrait généralement se comporter comme prévu, mais il existe quelques cas dans lesquels le comportement attendu n'est pas évident.

Rounding Epoch

Dans de nombreux cas, la résolution spécifiée pour l'arrondi (par exemple, Dates.Second(30)) se divise uniformément dans la période suivante la plus grande (dans ce cas, Dates.Minute(1)). Mais le comportement d'arrondi dans les cas où cela n'est pas vrai peut prêter à confusion. Quel est le résultat attendu de l'arrondi d'un DateTime à l'heure la plus proche de 10 heures ?

julia> round(DateTime(2016, 7, 17, 11, 55), Dates.Hour(10))
2016-07-17T12:00:00

Cela peut sembler déroutant, étant donné que l'heure (12) n'est pas divisible par 10. La raison pour laquelle 2016-07-17T12:00:00 a été choisie est qu'elle est 17 676 660 heures après 0000-01-01T00:00:00, et 17 676 660 est divisible par 10.

En tant que Julia Date et DateTime, les valeurs sont représentées selon la norme ISO 8601, 0000-01-01T00:00:00 a été choisie comme base (ou "époque d'arrondi") à partir de laquelle commencer le comptage des jours (et des millisecondes) utilisés dans les calculs d'arrondi. (Notez que cela diffère légèrement de la représentation interne de Julia des 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 utilisant Rata Die notation ; mais puisque la norme ISO 8601 est la plus visible pour l'utilisateur final, 0000-01-01T00:00:00 a été choisie comme époque d'arrondi au lieu de 0000-12-31T00:00:00 utilisée en interne pour minimiser la confusion.)

La seule exception à l'utilisation de 0000-01-01T00:00:00 comme époque d'arrondi est lors de l'arrondi aux semaines. L'arrondi à la semaine la plus proche renverra toujours un lundi (le premier jour de la semaine tel que spécifié par l'ISO 8601). Pour cette raison, nous utilisons 0000-01-03T00:00:00 (le premier jour de la première semaine de l'année 0000, tel que défini par l'ISO 8601) comme base lors de l'arrondi à un nombre de semaines.

Voici un cas connexe dans lequel le comportement attendu n'est pas nécessairement évident : Que se passe-t-il lorsque nous arrondissons au P(2) le plus proche, où P est un type Period ? Dans certains cas (en particulier, lorsque P <: Dates.TimePeriod), la réponse est claire :

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Hour(2))
2016-07-17T08:00:00

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Minute(2))
2016-07-17T08:56:00

Cela semble évident, car deux de chacune de ces périodes se divise toujours également dans la période d'ordre supérieure suivante. Mais dans le cas de deux mois (qui se divise toujours également en un an), la réponse peut être surprenante :

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Month(2))
2016-07-01T00:00:00

Pourquoi arrondir au premier jour de juillet, même si c'est le mois 7 (un nombre impair) ? La clé est que les mois sont indexés à partir de 1 (le premier mois est assigné 1), contrairement aux heures, minutes, secondes et millisecondes (dont le premier est assigné 0).

Cela signifie que l'arrondi d'un DateTime à un multiple pair de secondes, minutes, heures ou années (car la spécification ISO 8601 inclut une année zéro) donnera un 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 avec une valeur paire dans ce champ, tandis que l'arrondi d'un 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 à un multiple pair de mois entraînera un champ mois ayant une valeur impaire. Étant donné que les mois et les années peuvent contenir un nombre irrégulier de jours, il est incertain que l'arrondi à un nombre pair de jours donnera une valeur paire dans le champ des jours.

Voir le API reference pour des informations supplémentaires sur les méthodes exportées du module Dates.

API reference

Dates and Time Types

Dates.PeriodType
Période
Année
Trimestre
Mois
Semaine
Jour
Heure
Minute
Seconde
Milliseconde
Microseconde
Nanoseconde

Period types represent discrete, human representations of time.

source
Dates.CompoundPeriodType
CompoundPeriod

Un CompoundPeriod est utile pour exprimer des périodes de temps qui ne sont pas un multiple fixe de périodes plus petites. Par exemple, "une année et un jour" n'est pas un nombre fixe de jours, mais peut être exprimé à l'aide d'un CompoundPeriod. En fait, un CompoundPeriod est automatiquement généré par l'addition de différents types de périodes, par exemple Year(1) + Day(1) produit un résultat de type CompoundPeriod.

source
Dates.InstantType
Instant

Les types Instant représentent des représentations de temps basées sur des entiers, en tant que lignes de temps continues à partir d'une époque.

source
Dates.UTInstantType
UTInstant{T}

Le UTInstant représente une chronologie machine basée sur le temps UT (1 jour = une révolution de la terre). Le T est un paramètre Period qui indique la résolution ou la précision de l'instant.

source
Dates.TimeTypeType
TimeType

Les types TimeType enveloppent les instances de machine Instant pour fournir des représentations humaines de l'instant machine. Time, DateTime et Date sont des sous-types de TimeType.

source
Dates.DateTimeType
DateTime

DateTime représente un point dans le temps selon le calendrier grégorien proleptique. La plus fine résolution du temps est la milliseconde (c'est-à-dire que les microsecondes ou les nanosecondes ne peuvent pas être représentées par ce type). Le type prend en charge l'arithmétique à virgule fixe, et est donc sujet à des sous-dépassements (et des dépassements). Une conséquence notable est l'arrondi lors de l'ajout d'une Microseconde ou d'une Nanoseconde :

julia> dt = DateTime(2023, 8, 19, 17, 45, 32, 900)
2023-08-19T17:45:32.900

julia> dt + Millisecond(1)
2023-08-19T17:45:32.901

julia> dt + Microsecond(1000) # 1000us == 1ms
2023-08-19T17:45:32.901

julia> dt + Microsecond(999) # 999us arrondi à 1000us
2023-08-19T17:45:32.901

julia> dt + Microsecond(1499) # 1499 arrondi à 1000us
2023-08-19T17:45:32.901
source
Dates.DateType
Date

Date enveloppe un UTInstant{Day} et l'interprète selon le calendrier grégorien proleptique.

source
Dates.TimeType
Temps

Temps enveloppe un Nanoseconde et représente un moment spécifique dans une journée de 24 heures.

source
Dates.TimeZoneType
TimeZone

Zone géographique généralement basée sur la longitude déterminant quelle heure il est à un certain endroit. Certains fuseaux horaires appliquent l'heure d'été (par exemple EST -> EDT). Pour des implémentations et plus de support, voir le package TimeZones.jl

source
Dates.UTCType
UTC

UTC, ou Temps Universel Coordonné, est le TimeZone à partir duquel tous les autres sont mesurés. Il est associé à l'heure à 0° de longitude. Il n'est pas ajusté pour l'heure d'été.

source

Dates Functions

Dates.DateTimeMethod
DateTime(y, [m, d, h, mi, s, ms]) -> DateTime

Construit un type DateTime par parties. Les arguments doivent être convertibles en Int64.

source
Dates.DateTimeMethod
DateTime(periods::Period...) -> DateTime

Construit un type DateTime à partir de parties de type Period. Les arguments peuvent être dans n'importe quel ordre. Les parties de DateTime non fournies seront par défaut à la valeur de Dates.default(period).

source
Dates.DateTimeMethod
DateTime(f::Function, y[, m, d, h, mi, s]; step=Day(1), limit=10000) -> DateTime

Créez un DateTime via l'API d'ajustement. Le point de départ sera construit à partir des arguments fournis y, m, d..., et sera ajusté jusqu'à ce que f::Function retourne true. La taille du pas dans l'ajustement peut être fournie manuellement via le mot-clé step. limit fournit une limite au nombre maximum d'itérations que l'API d'ajustement poursuivra avant de lancer une erreur (dans le cas où f::Function n'est jamais satisfait).

Exemples

julia> DateTime(dt -> second(dt) == 40, 2010, 10, 20, 10; step = Second(1))
2010-10-20T10:00:40

julia> DateTime(dt -> hour(dt) == 20, 2010, 10, 20, 10; step = Hour(1), limit = 5)
ERROR: ArgumentError: Limite d'ajustement atteinte : 5 itérations
Stacktrace:
[...]
source
Dates.DateTimeMethod
DateTime(dt::Date) -> DateTime

Convertir un Date en un DateTime. Les parties heure, minute, seconde et milliseconde du nouveau DateTime sont supposées être nulles.

source
Dates.DateTimeMethod
DateTime(dt::AbstractString, format::AbstractString; locale="english") -> DateTime

Construit un DateTime en analysant la chaîne de date et heure dt suivant le modèle donné dans la chaîne format (voir DateFormat pour la syntaxe).

Note

Cette méthode crée un objet DateFormat chaque fois qu'elle est appelée. Il est recommandé de créer un objet DateFormat à la place et de l'utiliser comme deuxième argument pour éviter une perte de performance lors de l'utilisation du même format de manière répétée.

Exemples

julia> DateTime("2020-01-01", "yyyy-mm-dd")
2020-01-01T00:00:00

julia> a = ("2020-01-01", "2020-01-02");

julia> [DateTime(d, dateformat"yyyy-mm-dd") for d ∈ a] # préféré
2-element Vector{DateTime}:
 2020-01-01T00:00:00
 2020-01-02T00:00:00
source
Dates.formatMethod
format(dt::TimeType, format::AbstractString; locale="french") -> AbstractString

Construisez une chaîne en utilisant un objet TimeType et en appliquant le format fourni. Les codes de caractères suivants peuvent être utilisés pour construire la chaîne format :

CodeExemplesCommentaire
y6Année numérique avec une largeur fixe
Y1996Année numérique avec une largeur minimale
m1, 12Mois numérique avec une largeur minimale
uJanNom du mois abrégé à 3 caractères selon le locale
UJanvierNom complet du mois selon le mot-clé locale
d1, 31Jour du mois avec une largeur minimale
H0, 23Heure (horloge 24 heures) avec une largeur minimale
M0, 59Minute avec une largeur minimale
S0, 59Seconde avec une largeur minimale
s000, 500Milliseconde avec une largeur minimale de 3
eLun, MarJours de la semaine abrégés
ELundiNom complet du jour de la semaine

Le nombre de caractères de code séquentiels indique la largeur du code. Un format de yyyy-mm spécifie que le code y doit avoir une largeur de quatre tandis que m une largeur de deux. Les codes qui produisent des chiffres numériques ont un mode associé : largeur fixe ou largeur minimale. Le mode à largeur fixe ajoute des zéros à gauche lorsque la valeur est plus courte que la largeur spécifiée et tronque la valeur lorsqu'elle est plus longue. Le mode à largeur minimale fonctionne de la même manière que le mode à largeur fixe, sauf qu'il ne tronque pas les valeurs plus longues que la largeur.

Lors de la création d'un format, vous pouvez utiliser n'importe quel caractère non code comme séparateur. Par exemple, pour générer la chaîne "1996-01-15T00:00:00", vous pourriez utiliser format : "yyyy-mm-ddTHH:MM:SS". Notez que si vous devez utiliser un caractère de code comme littéral, vous pouvez utiliser le caractère d'échappement backslash. La chaîne "1996y01m" peut être produite avec le format "yyyy\ymm\m".

source
Dates.DateFormatType
DateFormat(format::AbstractString, locale="français") -> DateFormat

Construisez un objet de formatage de date qui peut être utilisé pour analyser des chaînes de date ou formater un objet date en tant que chaîne. Les codes de caractères suivants peuvent être utilisés pour construire la chaîne format :

CodeCorrespond àCommentaire
Y1996, 96Renvoie l'année de 1996, 0096
y1996, 96Identique à Y sur parse mais ignore les chiffres excessifs sur format
m1, 01Correspond à des mois de 1 ou 2 chiffres
uJanCorrespond à des mois abrégés selon le mot-clé locale
UJanvierCorrespond à des noms de mois complets selon le mot-clé locale
d1, 01Correspond à des jours de 1 ou 2 chiffres
H00Correspond aux heures (horloge 24 heures)
I00Pour afficher les heures avec une horloge de 12 heures
M00Correspond aux minutes
S00Correspond aux secondes
s.500Correspond aux millisecondes
eLun, MarCorrespond à des jours abrégés de la semaine
ELundiCorrespond à des noms complets des jours de la semaine
pAMCorrespond à AM/PM (insensible à la casse)
yyyymmdd19960101Correspond à l'année, au mois et au jour à largeur fixe

Les caractères non listés ci-dessus sont normalement traités comme des délimiteurs entre les slots de date et d'heure. Par exemple, une chaîne dt de "1996-01-15T00:00:00.0" aurait une chaîne format comme "y-m-dTH:M:S.s". Si vous devez utiliser un caractère de code comme délimiteur, vous pouvez l'échapper en utilisant un antislash. La date "1995y01m" aurait le format "y\ym\m".

Notez que 12:00AM correspond à 00:00 (minuit), et 12:00PM correspond à 12:00 (midi). Lors de l'analyse d'une heure avec un spécificateur p, toute heure (soit H ou I) est interprétée comme une horloge de 12 heures, donc le code I est principalement utile pour la sortie.

Créer un objet DateFormat est coûteux. Chaque fois que cela est possible, créez-le une fois et utilisez-le plusieurs fois ou essayez la macro de chaîne dateformat"". L'utilisation de cette macro crée l'objet DateFormat une fois au moment de l'expansion de la macro et le réutilise plus tard. Il existe également plusieurs formatteurs pré-définis, listés plus loin.

Voir DateTime et format pour savoir comment utiliser un objet DateFormat pour analyser et écrire des chaînes de date respectivement.

source
Dates.@dateformat_strMacro
dateformat"Y-m-d H:M:S"

Créez un objet DateFormat. Semblable à DateFormat("Y-m-d H:M:S") mais crée l'objet DateFormat une fois lors de l'expansion de la macro.

Voir DateFormat pour des détails sur les spécificateurs de format.

source
Dates.DateTimeMethod
DateTime(dt::AbstractString, df::DateFormat=ISODateTimeFormat) -> DateTime

Construit un DateTime en analysant la chaîne de date et d'heure dt selon le modèle donné dans l'objet DateFormat, ou dateformat"yyyy-mm-dd\THH:MM:SS.s" si omis.

Semblable à DateTime(::AbstractString, ::AbstractString) mais plus efficace lors de l'analyse répétée de chaînes de date et d'heure au format similaire avec un objet DateFormat pré-créé.

source
Dates.DateMethod
Date(y, [m, d]) -> Date

Construit un type Date par parties. Les arguments doivent être convertibles en Int64.

source
Dates.DateMethod
Date(period::Period...) -> Date

Construit un type Date à partir de parties de type Period. Les arguments peuvent être dans n'importe quel ordre. Les parties de Date non fournies prendront par défaut la valeur de Dates.default(period).

source
Dates.DateMethod
Date(f::Function, y[, m, d]; step=Day(1), limit=10000) -> Date

Créez un Date via l'API d'ajustement. Le point de départ sera construit à partir des arguments fournis y, m, d, et sera ajusté jusqu'à ce que f::Function retourne true. La taille du pas dans l'ajustement peut être fournie manuellement via le mot-clé step. limit fournit une limite au nombre maximum d'itérations que l'API d'ajustement poursuivra avant de lancer une erreur (étant donné que f::Function n'est jamais satisfait).

Exemples

julia> Date(date -> week(date) == 20, 2010, 01, 01)
2010-05-17

julia> Date(date -> year(date) == 2010, 2000, 01, 01)
2010-01-01

julia> Date(date -> month(date) == 10, 2000, 01, 01; limit = 5)
ERROR: ArgumentError: Limite d'ajustement atteinte : 5 itérations
Stacktrace:
[...]
source
Dates.DateMethod
Date(dt::DateTime) -> Date

Convertir un DateTime en un Date. Les parties heure, minute, seconde et milliseconde du DateTime sont tronquées, donc seules les parties année, mois et jour sont utilisées dans la construction.

source
Dates.DateMethod
Date(d::AbstractString, format::AbstractString; locale="english") -> Date

Construit un Date en analysant la chaîne de date d suivant le modèle donné dans la chaîne format (voir DateFormat pour la syntaxe).

Note

Cette méthode crée un objet DateFormat chaque fois qu'elle est appelée. Il est recommandé de créer un objet DateFormat à la place et de l'utiliser comme deuxième argument pour éviter une perte de performance lors de l'utilisation du même format de manière répétée.

Exemples

julia> Date("2020-01-01", "yyyy-mm-dd")
2020-01-01

julia> a = ("2020-01-01", "2020-01-02");

julia> [Date(d, dateformat"yyyy-mm-dd") for d ∈ a] # préféré
2-element Vector{Date}:
 2020-01-01
 2020-01-02
source
Dates.DateMethod
Date(d::AbstractString, df::DateFormat=ISODateFormat) -> Date

Construit un Date en analysant la chaîne de date d suivant le modèle donné dans l'objet DateFormat, ou dateformat"yyyy-mm-dd" si omis.

Semblable à Date(::AbstractString, ::AbstractString) mais plus efficace lors de l'analyse répétée de chaînes de date au format similaire avec un objet DateFormat pré-créé.

source
Dates.TimeMethod
Time(h, [mi, s, ms, us, ns]) -> Time

Construisez un type Time par parties. Les arguments doivent être convertibles en Int64.

source
Dates.TimeMethod
Time(period::TimePeriod...) -> Time

Construit un type Time à partir de parties de type Period. Les arguments peuvent être dans n'importe quel ordre. Les parties Time non fournies prendront par défaut la valeur de Dates.default(period).

source
Dates.TimeMethod
Time(f::Function, h, mi=0; step::Period=Second(1), limit::Int=10000)
Time(f::Function, h, mi, s; step::Period=Millisecond(1), limit::Int=10000)
Time(f::Function, h, mi, s, ms; step::Period=Microsecond(1), limit::Int=10000)
Time(f::Function, h, mi, s, ms, us; step::Period=Nanosecond(1), limit::Int=10000)

Créez un Time via l'API d'ajustement. Le point de départ sera construit à partir des arguments fournis h, mi, s, ms, us, et sera ajusté jusqu'à ce que f::Function retourne true. La taille du pas dans l'ajustement peut être fournie manuellement via le mot-clé step. limit fournit une limite au nombre maximum d'itérations que l'API d'ajustement poursuivra avant de lancer une erreur (dans le cas où f::Function n'est jamais satisfait). Notez que le pas par défaut s'ajustera pour permettre une plus grande précision pour les arguments donnés ; c'est-à-dire que si des arguments d'heure, de minute et de seconde sont fournis, le pas par défaut sera Millisecond(1) au lieu de Second(1).

Exemples

julia> Time(t -> minute(t) == 30, 20)
20:30:00

julia> Time(t -> minute(t) == 0, 20)
20:00:00

julia> Time(t -> hour(t) == 10, 3; limit = 5)
ERROR: ArgumentError: Limite d'ajustement atteinte : 5 itérations
Stacktrace:
[...]
source
Dates.TimeMethod
Time(dt::DateTime) -> Time

Convertir un DateTime en un Time. Les parties heure, minute, seconde et milliseconde du DateTime sont utilisées pour créer le nouveau Time. Les microsecondes et nanosecondes sont par défaut à zéro.

source
Dates.TimeMethod
Time(t::AbstractString, format::AbstractString; locale="english") -> Time

Construit un Time en analysant la chaîne de temps t suivant le modèle donné dans la chaîne format (voir DateFormat pour la syntaxe).

Note

Cette méthode crée un objet DateFormat chaque fois qu'elle est appelée. Il est recommandé de créer un objet DateFormat à la place et de l'utiliser comme deuxième argument pour éviter une perte de performance lors de l'utilisation du même format de manière répétée.

Exemples

julia> Time("12:34pm", "HH:MMp")
12:34:00

julia> a = ("12:34pm", "2:34am");

julia> [Time(d, dateformat"HH:MMp") for d ∈ a] # préféré
2-element Vector{Time}:
 12:34:00
 02:34:00
source
Dates.TimeMethod
Time(t::AbstractString, df::DateFormat=ISOTimeFormat) -> Time

Construit un Time en analysant la chaîne de date et heure t suivant le modèle donné dans l'objet DateFormat, ou dateformat"HH:MM:SS.s" si omis.

Semblable à Time(::AbstractString, ::AbstractString) mais plus efficace lors de l'analyse répétée de chaînes de temps au format similaire avec un objet DateFormat pré-créé.

source
Dates.nowMethod
now() -> DateTime

Renvoie un DateTime correspondant à l'heure système de l'utilisateur, y compris le fuseau horaire du système.

source
Dates.nowMethod
now(::Type{UTC}) -> DateTime

Renvoie un DateTime correspondant à l'heure système de l'utilisateur en UTC/GMT. Pour d'autres fuseaux horaires, voir le package TimeZones.jl.

Exemples

julia> now(UTC)
2023-01-04T10:52:24.864
source
Base.epsMethod
eps(::Type{DateTime}) -> Milliseconde
eps(::Type{Date}) -> Jour
eps(::Type{Time}) -> Nanoseconde
eps(::TimeType) -> Période

Retourne la plus petite valeur d'unité supportée par le TimeType.

Exemples

julia> eps(DateTime)
1 milliseconde

julia> eps(Date)
1 jour

julia> eps(Time)
1 nanoseconde
source

Accessor Functions

Dates.yearFunction
year(dt::TimeType) -> Int64

L'année d'un Date ou DateTime sous forme d'un Int64.

source
Dates.monthFunction
month(dt::TimeType) -> Int64

Le mois d'un Date ou DateTime sous forme d'un Int64.

source
Dates.weekFunction
week(dt::TimeType) -> Int64

Renvoie la date de semaine ISO d'un Date ou DateTime sous forme d'un Int64. Notez que la première semaine de l'année est celle qui contient le premier jeudi de l'année, ce qui peut entraîner des dates antérieures au 4 janvier étant dans la dernière semaine de l'année précédente. Par exemple, week(Date(2005, 1, 1)) est la 53e semaine de 2004.

Exemples

julia> week(Date(1989, 6, 22))
25

julia> week(Date(2005, 1, 1))
53

julia> week(Date(2004, 12, 31))
53
source
Dates.dayFunction
day(dt::TimeType) -> Int64

Le jour du mois d'une Date ou DateTime sous forme d'un Int64.

source
Dates.hourFunction
hour(dt::DateTime) -> Int64

L'heure du jour d'un DateTime en tant qu'Int64.

source
hour(t::Time) -> Int64

L'heure d'un Time en tant qu'Int64.

source
Dates.secondFunction
second(dt::DateTime) -> Int64

La seconde d'un DateTime en tant qu'Int64.

source
second(t::Time) -> Int64

La seconde d'un Time en tant qu'Int64.

source
Dates.millisecondFunction
milliseconde(dt::DateTime) -> Int64

La milliseconde d'un DateTime en tant que Int64.

source
milliseconde(t::Time) -> Int64

La milliseconde d'un Time en tant que Int64.

source
Dates.YearMethod
Year(v)

Construit un objet Year avec la valeur v donnée. L'entrée doit être convertissable sans perte en un Int64.

source
Dates.MonthMethod
Month(v)

Construit un objet Month avec la valeur v donnée. L'entrée doit être convertissable sans perte en un Int64.

source
Dates.WeekMethod
Week(v)

Construit un objet Week avec la valeur v donnée. L'entrée doit être convertissable sans perte en un Int64.

source
Dates.DayMethod
Day(v)

Construit un objet Day avec la valeur v donnée. L'entrée doit être convertissable sans perte en un Int64.

source
Dates.HourMethod
Hour(dt::DateTime) -> Heure

La partie heure d'un DateTime en tant que Heure.

source
Dates.MinuteMethod
Minute(dt::DateTime) -> Minute

La partie minute d'un DateTime sous forme de Minute.

source
Dates.SecondMethod
Second(dt::DateTime) -> Second

La partie seconde d'un DateTime en tant que Second.

source
Dates.MillisecondMethod
Milliseconde(dt::DateTime) -> Milliseconde

La partie milliseconde d'un DateTime en tant que Milliseconde.

source
Dates.MicrosecondMethod
Microseconde(dt::Time) -> Microseconde

La partie microseconde d'un Temps en tant que Microseconde.

source
Dates.NanosecondMethod
Nanoseconde(dt::Time) -> Nanoseconde

La partie nanoseconde d'un Temps en tant que Nanoseconde.

source
Dates.yearmonthFunction
yearmonth(dt::TimeType) -> (Int64, Int64)

Retourne simultanément les parties année et mois d'une Date ou DateTime.

source
Dates.monthdayFunction
monthday(dt::TimeType) -> (Int64, Int64)

Retourne simultanément les parties mois et jour d'une Date ou DateTime.

source
Dates.yearmonthdayFunction
yearmonthday(dt::TimeType) -> (Int64, Int64, Int64)

Retourne simultanément les parties année, mois et jour d'une Date ou DateTime.

source

Query Functions

Dates.daynameFunction
dayname(dt::TimeType; locale="français") -> String
dayname(day::Integer; locale="français") -> String

Retourne le nom complet du jour correspondant au jour de la semaine de la Date ou DateTime dans la locale donnée. Accepte également un Integer.

Exemples

julia> dayname(Date("2000-01-01"))
"Samedi"

julia> dayname(4)
"Jeudi"
source
Dates.dayabbrFunction
dayabbr(dt::TimeType; locale="français") -> String
dayabbr(day::Integer; locale="français") -> String

Retourne le nom abrégé correspondant au jour de la semaine de la Date ou DateTime dans la locale donnée. Accepte également un Integer.

Exemples

julia> dayabbr(Date("2000-01-01"))
"Sam"

julia> dayabbr(3)
"Mer"
source
Dates.dayofweekFunction
dayofweek(dt::TimeType) -> Int64

Renvoie le jour de la semaine sous forme d'un Int64 avec 1 = Lundi, 2 = Mardi, etc..

Exemples

julia> dayofweek(Date("2000-01-01"))
6
source
Dates.dayofweekofmonthFunction
dayofweekofmonth(dt::TimeType) -> Int

Pour le jour de la semaine de dt, renvoie quel numéro il est dans le mois de dt. Donc, si le jour de la semaine de dt est lundi, alors 1 = Premier lundi du mois, 2 = Deuxième lundi du mois, etc. Dans la plage 1:5.

Exemples

julia> dayofweekofmonth(Date("2000-02-01"))
1

julia> dayofweekofmonth(Date("2000-02-08"))
2

julia> dayofweekofmonth(Date("2000-02-15"))
3
source
Dates.daysofweekinmonthFunction
daysofweekinmonth(dt::TimeType) -> Int

Pour le jour de la semaine de dt, retourne le nombre total de ce jour de la semaine dans le mois de dt. Retourne 4 ou 5. Utile dans les expressions temporelles pour spécifier le dernier jour d'une semaine dans un mois en incluant dayofweekofmonth(dt) == daysofweekinmonth(dt) dans la fonction d'ajustement.

Exemples

julia> daysofweekinmonth(Date("2005-01-01"))
5

julia> daysofweekinmonth(Date("2005-01-04"))
4
source
Dates.monthnameFunction
monthname(dt::TimeType; locale="français") -> String
monthname(month::Integer, locale="français") -> String

Retourne le nom complet du mois de la Date ou DateTime ou Integer dans la locale donnée.

Exemples

julia> monthname(Date("2005-01-04"))
"Janvier"

julia> monthname(2)
"Février"
source
Dates.monthabbrFunction
monthabbr(dt::TimeType; locale="français") -> String
monthabbr(month::Integer, locale="français") -> String

Retourne le nom du mois abrégé de la Date ou DateTime ou Integer dans le locale donné.

Exemples

julia> monthabbr(Date("2005-01-04"))
"Jan"

julia> monthabbr(2)
"Fév"
source
Dates.daysinmonthFunction
daysinmonth(dt::TimeType) -> Int

Retourne le nombre de jours dans le mois de dt. La valeur sera 28, 29, 30 ou 31.

Exemples

julia> daysinmonth(Date("2000-01"))
31

julia> daysinmonth(Date("2001-02"))
28

julia> daysinmonth(Date("2000-02"))
29
source
Dates.isleapyearFunction
isleapyear(dt::TimeType) -> Bool

Retourne true si l'année de dt est une année bissextile.

Exemples

julia> isleapyear(Date("2004"))
true

julia> isleapyear(Date("2005"))
false
source
Dates.dayofyearFunction
dayofyear(dt::TimeType) -> Int

Retourne le jour de l'année pour dt, le 1er janvier étant le jour 1.

source
Dates.daysinyearFunction
daysinyear(dt::TimeType) -> Int

Retourne 366 si l'année de dt est une année bissextile, sinon retourne 365.

Exemples

julia> daysinyear(1999)
365

julia> daysinyear(2000)
366
source
Dates.quarterofyearFunction
quarterofyear(dt::TimeType) -> Int

Retourne le trimestre dans lequel dt se trouve. La plage de valeurs est 1:4.

source
Dates.dayofquarterFunction
dayofquarter(dt::TimeType) -> Int

Renvoie le jour du trimestre en cours de dt. La plage de valeurs est 1:92.

source

Adjuster Functions

Base.truncMethod
trunc(dt::TimeType, ::Type{Period}) -> TimeType

Tronque la valeur de dt selon le type de Period fourni.

Exemples

julia> trunc(DateTime("1996-01-01T12:30:00"), Day)
1996-01-01T00:00:00
source
Dates.firstdayofweekFunction
firstdayofweek(dt::TimeType) -> TimeType

Ajuste dt au lundi de sa semaine.

Exemples

julia> firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00
source
Dates.lastdayofweekFunction
lastdayofweek(dt::TimeType) -> TimeType

Ajuste dt au dimanche de sa semaine.

Exemples

julia> lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00
source
Dates.firstdayofmonthFunction
firstdayofmonth(dt::TimeType) -> TimeType

Ajuste dt au premier jour de son mois.

Exemples

julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00
source
Dates.lastdayofmonthFunction
lastdayofmonth(dt::TimeType) -> TimeType

Ajuste dt au dernier jour de son mois.

Exemples

julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00
source
Dates.firstdayofyearFunction
firstdayofyear(dt::TimeType) -> TimeType

Ajuste dt au premier jour de son année.

Exemples

julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00
source
Dates.lastdayofyearFunction
lastdayofyear(dt::TimeType) -> TimeType

Ajuste dt au dernier jour de son année.

Exemples

julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00
source
Dates.firstdayofquarterFunction
firstdayofquarter(dt::TimeType) -> TimeType

Ajuste dt au premier jour de son trimestre.

Exemples

julia> firstdayofquarter(DateTime("1996-05-20"))
1996-04-01T00:00:00

julia> firstdayofquarter(DateTime("1996-08-20"))
1996-07-01T00:00:00
source
Dates.lastdayofquarterFunction
lastdayofquarter(dt::TimeType) -> TimeType

Ajuste dt au dernier jour de son trimestre.

Exemples

julia> lastdayofquarter(DateTime("1996-05-20"))
1996-06-30T00:00:00

julia> lastdayofquarter(DateTime("1996-08-20"))
1996-09-30T00:00:00
source
Dates.tonextMethod
tonext(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

Ajuste dt au prochain jour de la semaine correspondant à dow avec 1 = Lundi, 2 = Mardi, etc. En définissant same=true, le dt actuel peut être considéré comme le prochain dow, permettant ainsi qu'aucun ajustement n'ait lieu.

source
Dates.toprevMethod
toprev(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

Ajuste dt au jour de la semaine précédent correspondant à dow avec 1 = Lundi, 2 = Mardi, etc. En définissant same=true, le dt actuel peut être considéré comme le précédent dow, permettant ainsi qu'aucun ajustement n'ait lieu.

source
Dates.tofirstFunction
tofirst(dt::TimeType, dow::Int; of=Month) -> TimeType

Ajuste dt au premier dow de son mois. Alternativement, of=Year ajustera au premier dow de l'année.

source
Dates.tolastFunction
tolast(dt::TimeType, dow::Int; of=Month) -> TimeType

Ajuste dt au dernier dow de son mois. Alternativement, of=Year ajustera au dernier dow de l'année.

source
Dates.tonextMethod
tonext(func::Function, dt::TimeType; step=Day(1), limit=10000, same=false) -> TimeType

Ajuste dt en itérant au maximum limit itérations par des incréments de step jusqu'à ce que func retourne true. func doit prendre un seul argument de type TimeType et retourner un Bool. same permet de considérer dt comme satisfaisant func.

source
Dates.toprevMethod
toprev(func::Function, dt::TimeType; step=Day(-1), limit=10000, same=false) -> TimeType

Ajuste dt en itérant au maximum limit itérations par des incréments de step jusqu'à ce que func retourne true. func doit prendre un seul argument de type TimeType et retourner un Bool. same permet de considérer dt pour satisfaire func.

source

Periods

Dates.PeriodMethod
Année(v)
Trimestre(v)
Mois(v)
Semaine(v)
Jour(v)
Heure(v)
Minute(v)
Seconde(v)
Milliseconde(v)
Microseconde(v)
Nanoseconde(v)

Construisez un type Période avec la valeur v donnée. L'entrée doit être convertissable sans perte en un Int64.

source
Dates.CompoundPeriodMethod
CompoundPeriod(periods) -> CompoundPeriod

Construit un CompoundPeriod à partir d'un Vector de Periods. Tous les Periods du même type seront additionnés.

Exemples

julia> Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13))
25 heures

julia> Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1))
-1 heure, 1 minute

julia> Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2))
1 mois, -2 semaines

julia> Dates.CompoundPeriod(Dates.Minute(50000))
50000 minutes
source
Dates.canonicalizeFunction
canonicalize(::CompoundPeriod) -> CompoundPeriod

Réduit le CompoundPeriod à sa forme canonique en appliquant les règles suivantes :

  • Tout Period suffisamment grand pour être partiellement représentable par un Period plus grossier sera divisé en plusieurs Periods (par exemple, Hour(30) devient Day(1) + Hour(6))
  • Les Periods avec des signes opposés seront combinés lorsque cela est possible (par exemple, Hour(1) - Day(1) devient -Hour(23))

Exemples

julia> canonicalize(Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13)))
1 jour, 1 heure

julia> canonicalize(Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1)))
-59 minutes

julia> canonicalize(Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2)))
1 mois, -2 semaines

julia> canonicalize(Dates.CompoundPeriod(Dates.Minute(50000)))
4 semaines, 6 jours, 17 heures, 20 minutes
source
Dates.valueFunction
Dates.value(x::Period) -> Int64

Pour une période donnée, renvoie la valeur associée à cette période. Par exemple, value(Millisecond(10)) renvoie 10 en tant qu'entier.

source
Dates.defaultFunction
default(p::Period) -> Period

Retourne une valeur "par défaut" sensée pour la période d'entrée en retournant T(1) pour l'Année, le Mois et le Jour, et T(0) pour l'Heure, la Minute, la Seconde et la Milliseconde.

source
Dates.periodsFunction
Dates.periods(::CompoundPeriod) -> Vector{Period}

Renvoie le Vector de Periods qui composent le CompoundPeriod donné.

Julia 1.7

Cette fonction nécessite Julia 1.7 ou une version ultérieure.

source

Rounding Functions

Les valeurs Date et DateTime peuvent être arrondies à une résolution spécifiée (par exemple, 1 mois ou 15 minutes) avec floor, ceil ou round.

Base.floorMethod
floor(dt::TimeType, p::Period) -> TimeType

Renvoie la date ou la date-heure la plus proche inférieure ou égale à dt à la résolution p.

Pour plus de commodité, p peut être un type au lieu d'une valeur : floor(dt, Dates.Hour) est un raccourci pour floor(dt, Dates.Hour(1)).

julia> floor(Date(1985, 8, 16), Month)
1985-08-01

julia> floor(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:30:00

julia> floor(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-06T00:00:00
source
Base.ceilMethod
ceil(dt::TimeType, p::Period) -> TimeType

Renvoie la date ou la date-heure la plus proche supérieure ou égale à dt à la résolution p.

Pour plus de commodité, p peut être un type au lieu d'une valeur : ceil(dt, Dates.Hour) est un raccourci pour ceil(dt, Dates.Hour(1)).

julia> ceil(Date(1985, 8, 16), Month)
1985-09-01

julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:45:00

julia> ceil(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-07T00:00:00
source
Base.roundMethod
round(dt::TimeType, p::Period, [r::RoundingMode]) -> TimeType

Renvoie la Date ou DateTime la plus proche de dt à la résolution p. Par défaut (RoundNearestTiesUp), les égalités (par exemple, arrondir 9:30 à l'heure la plus proche) seront arrondies vers le haut.

Pour plus de commodité, p peut être un type au lieu d'une valeur : round(dt, Dates.Hour) est un raccourci pour round(dt, Dates.Hour(1)).

julia> round(Date(1985, 8, 16), Month)
1985-08-01

julia> round(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:30:00

julia> round(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-07T00:00:00

Les modes d'arrondi valides pour round(::TimeType, ::Period, ::RoundingMode) sont RoundNearestTiesUp (par défaut), RoundDown (floor), et RoundUp (ceil).

source

La plupart des valeurs Period peuvent également être arrondies à une résolution spécifiée :

Base.floorMethod
floor(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T

Arrondir x vers le bas au multiple le plus proche de precision. Si x et precision sont des sous-types différents de Period, la valeur de retour aura le même type que precision.

Pour plus de commodité, precision peut être un type au lieu d'une valeur : floor(x, Dates.Hour) est un raccourci pour floor(x, Dates.Hour(1)).

julia> floor(Day(16), Week)
2 semaines

julia> floor(Minute(44), Minute(15))
30 minutes

julia> floor(Hour(36), Day)
1 jour

L'arrondi à une precision de Months ou Years n'est pas supporté, car ces Periods ont une longueur incohérente. ```

source
Base.ceilMethod
ceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T

Arrondir x à la multiple supérieur le plus proche de precision. Si x et precision sont des sous-types différents de Period, la valeur de retour aura le même type que precision.

Pour plus de commodité, precision peut être un type au lieu d'une valeur : ceil(x, Dates.Hour) est un raccourci pour ceil(x, Dates.Hour(1)).

julia> ceil(Day(16), Week)
3 weeks

julia> ceil(Minute(44), Minute(15))
45 minutes

julia> ceil(Hour(36), Day)
2 days

L'arrondi à une precision de Months ou Years n'est pas supporté, car ces Periods ont une longueur incohérente.

source
Base.roundMethod
round(x::Period, precision::T, [r::RoundingMode]) where T <: Union{TimePeriod, Week, Day} -> T

Arrondir x au multiple le plus proche de precision. Si x et precision sont des sous-types différents de Period, la valeur de retour aura le même type que precision. Par défaut (RoundNearestTiesUp), les égalités (par exemple, arrondir 90 minutes à l'heure la plus proche) seront arrondies vers le haut.

Pour plus de commodité, precision peut être un type au lieu d'une valeur : round(x, Dates.Hour) est un raccourci pour round(x, Dates.Hour(1)).

julia> round(Day(16), Week)
2 weeks

julia> round(Minute(44), Minute(15))
45 minutes

julia> round(Hour(36), Day)
2 days

Les modes d'arrondi valides pour round(::Period, ::T, ::RoundingMode) sont RoundNearestTiesUp (par défaut), RoundDown (floor), et RoundUp (ceil).

L'arrondi à une precision de Months ou Years n'est pas supporté, car ces Periods ont une longueur incohérente.

source

Les fonctions suivantes ne sont pas exportées :

Dates.floorceilFunction
floorceil(dt::TimeType, p::Period) -> (TimeType, TimeType)

Retourne simultanément le floor et le ceil d'une Date ou DateTime à la résolution p. Plus efficace que d'appeler floor et ceil individuellement.

source
floorceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> (T, T)

Retourne simultanément le floor et le ceil de Period à la résolution p. Plus efficace que d'appeler floor et ceil individuellement.

source
Dates.epochdays2dateFunction
epochdays2date(jours) -> Date

Prenez le nombre de jours depuis l'époque de rondage (0000-01-01T00:00:00) et renvoyez la Date correspondante.

source
Dates.epochms2datetimeFunction
epochms2datetime(milliseconds) -> DateTime

Prenez le nombre de millisecondes depuis l'époque de référence (0000-01-01T00:00:00) et renvoyez le DateTime correspondant.

source
Dates.date2epochdaysFunction
date2epochdays(dt::Date) -> Int64

Prenez la Date donnée et renvoyez le nombre de jours depuis l'époque de référence (0000-01-01T00:00:00) en tant qu'Int64.

source
Dates.datetime2epochmsFunction
datetime2epochms(dt::DateTime) -> Int64

Prenez le DateTime donné et renvoyez le nombre de millisecondes depuis l'époque de référence (0000-01-01T00:00:00) en tant qu'Int64.

source

Conversion Functions

Dates.todayFunction
aujourd'hui() -> Date

Renvoie la portion de date de maintenant().

source
Dates.unix2datetimeFunction
unix2datetime(x) -> DateTime

Prenez le nombre de secondes depuis l'époque unix 1970-01-01T00:00:00 et convertissez-le en DateTime correspondant.

source
Dates.datetime2unixFunction
datetime2unix(dt::DateTime) -> Float64

Prenez le DateTime donné et renvoyez le nombre de secondes depuis l'époque unix 1970-01-01T00:00:00 en tant que Float64.

source
Dates.julian2datetimeFunction
julian2datetime(julian_days) -> DateTime

Prenez le nombre de jours du calendrier julien depuis l'époque -4713-11-24T12:00:00 et renvoyez le DateTime correspondant.

source
Dates.datetime2julianFunction
datetime2julian(dt::DateTime) -> Float64

Prenez le DateTime donné et renvoyez le nombre de jours du calendrier julien depuis l'époque julienne -4713-11-24T12:00:00 sous forme de Float64.

source
Dates.rata2datetimeFunction
rata2datetime(jours) -> DateTime

Prenez le nombre de jours Rata Die depuis l'époque 0000-12-31T00:00:00 et renvoyez le DateTime correspondant.

source
Dates.datetime2rataFunction
datetime2rata(dt::TimeType) -> Int64

Retourne le nombre de jours Rata Die depuis l'époque à partir de la Date ou DateTime donnée.

source

Constants

Jours de la semaine :

VariableAbbr.Value (Int)
MondayMon1
TuesdayTue2
WednesdayWed3
ThursdayThu4
FridayFri5
SaturdaySat6
SundaySun7

Mois de l'année :

VariableAbbr.Value (Int)
JanuaryJan1
FebruaryFeb2
MarchMar3
AprilApr4
MayMay5
JuneJun6
JulyJul7
AugustAug8
SeptemberSep9
OctoberOct10
NovemberNov11
DecemberDec12

Common Date Formatters

Dates.ISODateTimeFormatConstant
Dates.ISODateTimeFormat

Décrit le format ISO8601 pour une date et une heure. C'est la valeur par défaut pour Dates.format d'un DateTime.

Exemples

julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), ISODateTimeFormat)
"2018-08-08T12:00:43.001"
source
Dates.ISODateFormatConstant
Dates.ISODateFormat

Décrit le formatage ISO8601 pour une date. C'est la valeur par défaut pour Dates.format d'une Date.

Exemples

julia> Dates.format(Date(2018, 8, 8), ISODateFormat)
"2018-08-08"
source
Dates.ISOTimeFormatConstant
Dates.ISOTimeFormat

Décrit le format ISO8601 pour une heure. C'est la valeur par défaut pour Dates.format d'un Time.

Exemples

julia> Dates.format(Time(12, 0, 43, 1), ISOTimeFormat)
"12:00:43.001"
source
Dates.RFC1123FormatConstant
Dates.RFC1123Format

Décrit le formatage RFC1123 pour une date et une heure.

Exemples

julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), RFC1123Format)
"Wed, 08 Aug 2018 12:00:43"
source
  • 1The notion of the UT second is actually quite fundamental. There are basically two different notions of time generally accepted, one based on the physical rotation of the earth (one full rotation = 1 day), the other based on the SI second (a fixed, constant value). These are radically different! Think about it, a "UT second", as defined relative to the rotation of the earth, may have a different absolute length depending on the day! Anyway, the fact that Date and DateTime are based on UT seconds is a simplifying, yet honest assumption so that things like leap seconds and all their complexity can be avoided. This basis of time is formally called UT or UT1. Basing types on the UT second basically means that every minute has 60 seconds and every day has 24 hours and leads to more natural calculations when working with calendar dates.