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-01Date 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")
endOu 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-02Alternativement, utilisez la diffusion :
julia> years = ["2015", "2016"];
julia> Date.(years, DateFormat("yyyy"))
2-element Vector{Date}:
2015-01-01
2016-01-01Pour 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é.
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 millisecondsAccessor 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)
31While propercase return the same value in the corresponding Period type:
julia> Dates.Year(t)
2014 years
julia> Dates.Day(t)
31 daysLes 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)
735264Query 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
5Mois de l'année :
julia> Dates.monthname(t)
"January"
julia> Dates.daysinmonth(t)
31Ainsi 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)
31Les 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-01Que 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-01Difficile ? 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-29Adjuster 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-30Les 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-15Ceci 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-27La 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-11Des 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))
10Repré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 minutesRounding
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:00Contrairement à 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:00Cela 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:00Cela 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:00Pourquoi 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.Period — TypePériode
Année
Trimestre
Mois
Semaine
Jour
Heure
Minute
Seconde
Milliseconde
Microseconde
NanosecondePeriod types represent discrete, human representations of time.
Dates.CompoundPeriod — TypeCompoundPeriodUn 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.
Dates.Instant — TypeInstantLes 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.
Dates.UTInstant — TypeUTInstant{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.
Dates.TimeType — TypeTimeTypeLes 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.
Dates.DateTime — TypeDateTimeDateTime 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.901Dates.Date — TypeDateDate enveloppe un UTInstant{Day} et l'interprète selon le calendrier grégorien proleptique.
Dates.Time — TypeTempsTemps enveloppe un Nanoseconde et représente un moment spécifique dans une journée de 24 heures.
Dates.TimeZone — TypeTimeZoneZone 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
Dates.UTC — TypeUTCUTC, 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é.
Dates Functions
Dates.DateTime — MethodDateTime(y, [m, d, h, mi, s, ms]) -> DateTimeConstruit un type DateTime par parties. Les arguments doivent être convertibles en Int64.
Dates.DateTime — MethodDateTime(periods::Period...) -> DateTimeConstruit 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).
Dates.DateTime — MethodDateTime(f::Function, y[, m, d, h, mi, s]; step=Day(1), limit=10000) -> DateTimeCré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:
[...]Dates.DateTime — MethodDateTime(dt::Date) -> DateTimeConvertir un Date en un DateTime. Les parties heure, minute, seconde et milliseconde du nouveau DateTime sont supposées être nulles.
Dates.DateTime — MethodDateTime(dt::AbstractString, format::AbstractString; locale="english") -> DateTimeConstruit 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).
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:00Dates.format — Methodformat(dt::TimeType, format::AbstractString; locale="french") -> AbstractStringConstruisez 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 :
| Code | Exemples | Commentaire |
|---|---|---|
y | 6 | Année numérique avec une largeur fixe |
Y | 1996 | Année numérique avec une largeur minimale |
m | 1, 12 | Mois numérique avec une largeur minimale |
u | Jan | Nom du mois abrégé à 3 caractères selon le locale |
U | Janvier | Nom complet du mois selon le mot-clé locale |
d | 1, 31 | Jour du mois avec une largeur minimale |
H | 0, 23 | Heure (horloge 24 heures) avec une largeur minimale |
M | 0, 59 | Minute avec une largeur minimale |
S | 0, 59 | Seconde avec une largeur minimale |
s | 000, 500 | Milliseconde avec une largeur minimale de 3 |
e | Lun, Mar | Jours de la semaine abrégés |
E | Lundi | Nom 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".
Dates.DateFormat — TypeDateFormat(format::AbstractString, locale="français") -> DateFormatConstruisez 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 :
| Code | Correspond à | Commentaire |
|---|---|---|
Y | 1996, 96 | Renvoie l'année de 1996, 0096 |
y | 1996, 96 | Identique à Y sur parse mais ignore les chiffres excessifs sur format |
m | 1, 01 | Correspond à des mois de 1 ou 2 chiffres |
u | Jan | Correspond à des mois abrégés selon le mot-clé locale |
U | Janvier | Correspond à des noms de mois complets selon le mot-clé locale |
d | 1, 01 | Correspond à des jours de 1 ou 2 chiffres |
H | 00 | Correspond aux heures (horloge 24 heures) |
I | 00 | Pour afficher les heures avec une horloge de 12 heures |
M | 00 | Correspond aux minutes |
S | 00 | Correspond aux secondes |
s | .500 | Correspond aux millisecondes |
e | Lun, Mar | Correspond à des jours abrégés de la semaine |
E | Lundi | Correspond à des noms complets des jours de la semaine |
p | AM | Correspond à AM/PM (insensible à la casse) |
yyyymmdd | 19960101 | Correspond à 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.
Dates.@dateformat_str — Macrodateformat"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.
Dates.DateTime — MethodDateTime(dt::AbstractString, df::DateFormat=ISODateTimeFormat) -> DateTimeConstruit 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éé.
Dates.Date — MethodDate(y, [m, d]) -> DateConstruit un type Date par parties. Les arguments doivent être convertibles en Int64.
Dates.Date — MethodDate(period::Period...) -> DateConstruit 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).
Dates.Date — MethodDate(f::Function, y[, m, d]; step=Day(1), limit=10000) -> DateCré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:
[...]Dates.Date — MethodDate(dt::DateTime) -> DateConvertir 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.
Dates.Date — MethodDate(d::AbstractString, format::AbstractString; locale="english") -> DateConstruit 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).
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-02Dates.Date — MethodDate(d::AbstractString, df::DateFormat=ISODateFormat) -> DateConstruit 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éé.
Dates.Time — MethodTime(h, [mi, s, ms, us, ns]) -> TimeConstruisez un type Time par parties. Les arguments doivent être convertibles en Int64.
Dates.Time — MethodTime(period::TimePeriod...) -> TimeConstruit 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).
Dates.Time — MethodTime(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:
[...]Dates.Time — MethodTime(dt::DateTime) -> TimeConvertir 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.
Dates.Time — MethodTime(t::AbstractString, format::AbstractString; locale="english") -> TimeConstruit 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).
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:00Dates.Time — MethodTime(t::AbstractString, df::DateFormat=ISOTimeFormat) -> TimeConstruit 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éé.
Dates.now — Methodnow() -> DateTimeRenvoie un DateTime correspondant à l'heure système de l'utilisateur, y compris le fuseau horaire du système.
Dates.now — Methodnow(::Type{UTC}) -> DateTimeRenvoie 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.864Base.eps — Methodeps(::Type{DateTime}) -> Milliseconde
eps(::Type{Date}) -> Jour
eps(::Type{Time}) -> Nanoseconde
eps(::TimeType) -> PériodeRetourne 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 nanosecondeAccessor Functions
Dates.year — Functionyear(dt::TimeType) -> Int64L'année d'un Date ou DateTime sous forme d'un Int64.
Dates.month — Functionmonth(dt::TimeType) -> Int64Le mois d'un Date ou DateTime sous forme d'un Int64.
Dates.week — Functionweek(dt::TimeType) -> Int64Renvoie 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))
53Dates.day — Functionday(dt::TimeType) -> Int64Le jour du mois d'une Date ou DateTime sous forme d'un Int64.
Dates.hour — Functionhour(dt::DateTime) -> Int64L'heure du jour d'un DateTime en tant qu'Int64.
hour(t::Time) -> Int64L'heure d'un Time en tant qu'Int64.
Dates.minute — Functionminute(dt::DateTime) -> Int64La minute d'un DateTime en tant qu'Int64.
minute(t::Time) -> Int64La minute d'un Time en tant qu'Int64.
Dates.second — Functionsecond(dt::DateTime) -> Int64La seconde d'un DateTime en tant qu'Int64.
second(t::Time) -> Int64La seconde d'un Time en tant qu'Int64.
Dates.millisecond — Functionmilliseconde(dt::DateTime) -> Int64La milliseconde d'un DateTime en tant que Int64.
milliseconde(t::Time) -> Int64La milliseconde d'un Time en tant que Int64.
Dates.microsecond — Functionmicroseconde(t::Time) -> Int64La microseconde d'un Time en tant qu'Int64.
Dates.nanosecond — Functionnanosecond(t::Time) -> Int64Le nanoseconde d'un Time en tant que Int64.
Dates.Year — MethodYear(v)Construit un objet Year avec la valeur v donnée. L'entrée doit être convertissable sans perte en un Int64.
Dates.Month — MethodMonth(v)Construit un objet Month avec la valeur v donnée. L'entrée doit être convertissable sans perte en un Int64.
Dates.Week — MethodWeek(v)Construit un objet Week avec la valeur v donnée. L'entrée doit être convertissable sans perte en un Int64.
Dates.Day — MethodDay(v)Construit un objet Day avec la valeur v donnée. L'entrée doit être convertissable sans perte en un Int64.
Dates.Hour — MethodHour(dt::DateTime) -> HeureLa partie heure d'un DateTime en tant que Heure.
Dates.Minute — MethodMinute(dt::DateTime) -> MinuteLa partie minute d'un DateTime sous forme de Minute.
Dates.Second — MethodSecond(dt::DateTime) -> SecondLa partie seconde d'un DateTime en tant que Second.
Dates.Millisecond — MethodMilliseconde(dt::DateTime) -> MillisecondeLa partie milliseconde d'un DateTime en tant que Milliseconde.
Dates.Microsecond — MethodMicroseconde(dt::Time) -> MicrosecondeLa partie microseconde d'un Temps en tant que Microseconde.
Dates.Nanosecond — MethodNanoseconde(dt::Time) -> NanosecondeLa partie nanoseconde d'un Temps en tant que Nanoseconde.
Dates.yearmonth — Functionyearmonth(dt::TimeType) -> (Int64, Int64)Retourne simultanément les parties année et mois d'une Date ou DateTime.
Dates.monthday — Functionmonthday(dt::TimeType) -> (Int64, Int64)Retourne simultanément les parties mois et jour d'une Date ou DateTime.
Dates.yearmonthday — Functionyearmonthday(dt::TimeType) -> (Int64, Int64, Int64)Retourne simultanément les parties année, mois et jour d'une Date ou DateTime.
Query Functions
Dates.dayname — Functiondayname(dt::TimeType; locale="français") -> String
dayname(day::Integer; locale="français") -> StringRetourne 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"Dates.dayabbr — Functiondayabbr(dt::TimeType; locale="français") -> String
dayabbr(day::Integer; locale="français") -> StringRetourne 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"Dates.dayofweek — Functiondayofweek(dt::TimeType) -> Int64Renvoie le jour de la semaine sous forme d'un Int64 avec 1 = Lundi, 2 = Mardi, etc..
Exemples
julia> dayofweek(Date("2000-01-01"))
6Dates.dayofmonth — Functiondayofmonth(dt::TimeType) -> Int64Le jour du mois d'une Date ou DateTime sous forme d'un Int64.
Dates.dayofweekofmonth — Functiondayofweekofmonth(dt::TimeType) -> IntPour 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"))
3Dates.daysofweekinmonth — Functiondaysofweekinmonth(dt::TimeType) -> IntPour 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"))
4Dates.monthname — Functionmonthname(dt::TimeType; locale="français") -> String
monthname(month::Integer, locale="français") -> StringRetourne 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"Dates.monthabbr — Functionmonthabbr(dt::TimeType; locale="français") -> String
monthabbr(month::Integer, locale="français") -> StringRetourne 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"Dates.daysinmonth — Functiondaysinmonth(dt::TimeType) -> IntRetourne 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"))
29Dates.isleapyear — Functionisleapyear(dt::TimeType) -> BoolRetourne true si l'année de dt est une année bissextile.
Exemples
julia> isleapyear(Date("2004"))
true
julia> isleapyear(Date("2005"))
falseDates.dayofyear — Functiondayofyear(dt::TimeType) -> IntRetourne le jour de l'année pour dt, le 1er janvier étant le jour 1.
Dates.daysinyear — Functiondaysinyear(dt::TimeType) -> IntRetourne 366 si l'année de dt est une année bissextile, sinon retourne 365.
Exemples
julia> daysinyear(1999)
365
julia> daysinyear(2000)
366Dates.quarterofyear — Functionquarterofyear(dt::TimeType) -> IntRetourne le trimestre dans lequel dt se trouve. La plage de valeurs est 1:4.
Dates.dayofquarter — Functiondayofquarter(dt::TimeType) -> IntRenvoie le jour du trimestre en cours de dt. La plage de valeurs est 1:92.
Adjuster Functions
Base.trunc — Methodtrunc(dt::TimeType, ::Type{Period}) -> TimeTypeTronque la valeur de dt selon le type de Period fourni.
Exemples
julia> trunc(DateTime("1996-01-01T12:30:00"), Day)
1996-01-01T00:00:00Dates.firstdayofweek — Functionfirstdayofweek(dt::TimeType) -> TimeTypeAjuste dt au lundi de sa semaine.
Exemples
julia> firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00Dates.lastdayofweek — Functionlastdayofweek(dt::TimeType) -> TimeTypeAjuste dt au dimanche de sa semaine.
Exemples
julia> lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00Dates.firstdayofmonth — Functionfirstdayofmonth(dt::TimeType) -> TimeTypeAjuste dt au premier jour de son mois.
Exemples
julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00Dates.lastdayofmonth — Functionlastdayofmonth(dt::TimeType) -> TimeTypeAjuste dt au dernier jour de son mois.
Exemples
julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00Dates.firstdayofyear — Functionfirstdayofyear(dt::TimeType) -> TimeTypeAjuste dt au premier jour de son année.
Exemples
julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00Dates.lastdayofyear — Functionlastdayofyear(dt::TimeType) -> TimeTypeAjuste dt au dernier jour de son année.
Exemples
julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00Dates.firstdayofquarter — Functionfirstdayofquarter(dt::TimeType) -> TimeTypeAjuste 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:00Dates.lastdayofquarter — Functionlastdayofquarter(dt::TimeType) -> TimeTypeAjuste 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:00Dates.tonext — Methodtonext(dt::TimeType, dow::Int; same::Bool=false) -> TimeTypeAjuste 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.
Dates.toprev — Methodtoprev(dt::TimeType, dow::Int; same::Bool=false) -> TimeTypeAjuste 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.
Dates.tofirst — Functiontofirst(dt::TimeType, dow::Int; of=Month) -> TimeTypeAjuste dt au premier dow de son mois. Alternativement, of=Year ajustera au premier dow de l'année.
Dates.tolast — Functiontolast(dt::TimeType, dow::Int; of=Month) -> TimeTypeAjuste dt au dernier dow de son mois. Alternativement, of=Year ajustera au dernier dow de l'année.
Dates.tonext — Methodtonext(func::Function, dt::TimeType; step=Day(1), limit=10000, same=false) -> TimeTypeAjuste 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.
Dates.toprev — Methodtoprev(func::Function, dt::TimeType; step=Day(-1), limit=10000, same=false) -> TimeTypeAjuste 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.
Periods
Dates.Period — MethodAnné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.
Dates.CompoundPeriod — MethodCompoundPeriod(periods) -> CompoundPeriodConstruit 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 minutesDates.canonicalize — Functioncanonicalize(::CompoundPeriod) -> CompoundPeriodRéduit le CompoundPeriod à sa forme canonique en appliquant les règles suivantes :
- Tout
Periodsuffisamment grand pour être partiellement représentable par unPeriodplus grossier sera divisé en plusieursPeriods (par exemple,Hour(30)devientDay(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 minutesDates.value — FunctionDates.value(x::Period) -> Int64Pour une période donnée, renvoie la valeur associée à cette période. Par exemple, value(Millisecond(10)) renvoie 10 en tant qu'entier.
Dates.default — Functiondefault(p::Period) -> PeriodRetourne 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.
Dates.periods — FunctionDates.periods(::CompoundPeriod) -> Vector{Period}Renvoie le Vector de Periods qui composent le CompoundPeriod donné.
Cette fonction nécessite Julia 1.7 ou une version ultérieure.
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.floor — Methodfloor(dt::TimeType, p::Period) -> TimeTypeRenvoie 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:00Base.ceil — Methodceil(dt::TimeType, p::Period) -> TimeTypeRenvoie 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:00Base.round — Methodround(dt::TimeType, p::Period, [r::RoundingMode]) -> TimeTypeRenvoie 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:00Les modes d'arrondi valides pour round(::TimeType, ::Period, ::RoundingMode) sont RoundNearestTiesUp (par défaut), RoundDown (floor), et RoundUp (ceil).
La plupart des valeurs Period peuvent également être arrondies à une résolution spécifiée :
Base.floor — Methodfloor(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> TArrondir 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 jourL'arrondi à une precision de Months ou Years n'est pas supporté, car ces Periods ont une longueur incohérente. ```
Base.ceil — Methodceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> TArrondir 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 daysL'arrondi à une precision de Months ou Years n'est pas supporté, car ces Periods ont une longueur incohérente.
Base.round — Methodround(x::Period, precision::T, [r::RoundingMode]) where T <: Union{TimePeriod, Week, Day} -> TArrondir 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 daysLes 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.
Les fonctions suivantes ne sont pas exportées :
Dates.floorceil — Functionfloorceil(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.
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.
Dates.epochdays2date — Functionepochdays2date(jours) -> DatePrenez le nombre de jours depuis l'époque de rondage (0000-01-01T00:00:00) et renvoyez la Date correspondante.
Dates.epochms2datetime — Functionepochms2datetime(milliseconds) -> DateTimePrenez le nombre de millisecondes depuis l'époque de référence (0000-01-01T00:00:00) et renvoyez le DateTime correspondant.
Dates.date2epochdays — Functiondate2epochdays(dt::Date) -> Int64Prenez 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.
Dates.datetime2epochms — Functiondatetime2epochms(dt::DateTime) -> Int64Prenez 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.
Conversion Functions
Dates.today — Functionaujourd'hui() -> DateRenvoie la portion de date de maintenant().
Dates.unix2datetime — Functionunix2datetime(x) -> DateTimePrenez le nombre de secondes depuis l'époque unix 1970-01-01T00:00:00 et convertissez-le en DateTime correspondant.
Dates.datetime2unix — Functiondatetime2unix(dt::DateTime) -> Float64Prenez le DateTime donné et renvoyez le nombre de secondes depuis l'époque unix 1970-01-01T00:00:00 en tant que Float64.
Dates.julian2datetime — Functionjulian2datetime(julian_days) -> DateTimePrenez le nombre de jours du calendrier julien depuis l'époque -4713-11-24T12:00:00 et renvoyez le DateTime correspondant.
Dates.datetime2julian — Functiondatetime2julian(dt::DateTime) -> Float64Prenez 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.
Dates.rata2datetime — Functionrata2datetime(jours) -> DateTimePrenez le nombre de jours Rata Die depuis l'époque 0000-12-31T00:00:00 et renvoyez le DateTime correspondant.
Dates.datetime2rata — Functiondatetime2rata(dt::TimeType) -> Int64Retourne le nombre de jours Rata Die depuis l'époque à partir de la Date ou DateTime donnée.
Constants
Jours de la semaine :
| Variable | Abbr. | Value (Int) |
|---|---|---|
Monday | Mon | 1 |
Tuesday | Tue | 2 |
Wednesday | Wed | 3 |
Thursday | Thu | 4 |
Friday | Fri | 5 |
Saturday | Sat | 6 |
Sunday | Sun | 7 |
Mois de l'année :
| Variable | Abbr. | Value (Int) |
|---|---|---|
January | Jan | 1 |
February | Feb | 2 |
March | Mar | 3 |
April | Apr | 4 |
May | May | 5 |
June | Jun | 6 |
July | Jul | 7 |
August | Aug | 8 |
September | Sep | 9 |
October | Oct | 10 |
November | Nov | 11 |
December | Dec | 12 |
Common Date Formatters
Dates.ISODateTimeFormat — ConstantDates.ISODateTimeFormatDé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"Dates.ISODateFormat — ConstantDates.ISODateFormatDé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"Dates.ISOTimeFormat — ConstantDates.ISOTimeFormatDé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"Dates.RFC1123Format — ConstantDates.RFC1123FormatDé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"- 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
DateandDateTimeare 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.