Dates
Das Dates-Modul bietet zwei Typen zur Arbeit mit Daten: Date und DateTime, die Tag- bzw. Millisekunden-Präzision darstellen; beide sind Untertypen des abstrakten TimeType. Die Motivation für unterschiedliche Typen ist einfach: Einige Operationen sind viel einfacher, sowohl in Bezug auf den Code als auch auf das mentale Denken, wenn die Komplexitäten einer höheren Präzision nicht berücksichtigt werden müssen. Zum Beispiel, da der Typ 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 nur auf die Präzision eines einzelnen Datums (d.h. keine Stunden, Minuten oder Sekunden) auflöst, sind normale Überlegungen zu Zeitzonen, Sommerzeit und Schaltsekunden unnötig und werden vermieden.
Sowohl Date als auch DateTime sind im Grunde unveränderliche Int64 Wrapper. Das einzelne instant-Feld beider Typen ist tatsächlich ein UTInstant{P}-Typ, der eine kontinuierlich steigende Maschinenzeitleiste basierend auf der UT-Sekunde [1] darstellt. Der Typ 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 ist sich der Zeitzonen nicht bewusst (naiv, im Python-Jargon), analog zu einem LocalDateTime in Java 8. Zusätzliche Zeitzonenfunktionen können über die TimeZones.jl package hinzugefügt werden, die die IANA time zone database kompiliert. Sowohl 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 als auch 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 basieren auf dem ISO 8601 Standard, der dem proleptischen Gregorianischen Kalender folgt. Eine Anmerkung ist, dass der ISO 8601 Standard besonders bezüglich BC/BCE-Daten ist. Im Allgemeinen folgte der letzte Tag der BC/BCE-Ära, der 31.12.1 v. Chr. (BC/BCE), dem 1.1.1 n. Chr. (AD/CE), sodass es kein Jahr null gibt. Der ISO-Standard besagt jedoch, dass 1 v. Chr. (BC/BCE) Jahr null ist, sodass 0000-12-31 der Tag vor 0001-01-01 ist, und Jahr -0001 (ja, negativ eins für das Jahr) ist 2 v. Chr. (BC/BCE), Jahr -0002 ist 3 v. Chr. (BC/BCE) usw.
Constructors
Date und DateTime Typen können durch Ganzzahlen oder Period Typen, durch Parsen oder durch Anpassungen (mehr dazu später) konstruiert werden:
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 oder DateTime Parsing wird durch die Verwendung von Format-Strings erreicht. Format-Strings funktionieren nach dem Prinzip, delimitierte oder feste Breite "Slots" zu definieren, die einen Punkt zum Parsen enthalten, und den zu parsenden Text sowie den Format-String an einen 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 oder 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 Konstruktor zu übergeben, in der Form Date("2015-01-01",dateformat"y-m-d") oder DateTime("20150101",dateformat"yyyymmdd").
Getrennte Slots werden markiert, indem der Trennzeichen angegeben wird, den der Parser zwischen zwei aufeinanderfolgenden Perioden erwarten soll; so lässt "y-m-d" den Parser wissen, dass zwischen dem ersten und zweiten Slot in einem Datumsstring wie "2014-07-16" das Zeichen - gefunden werden sollte. Die Zeichen y, m und d lassen den Parser wissen, welche Perioden in jedem Slot geparst werden sollen.
Wie im Fall der oben genannten Konstruktoren wie Date(2013) erlauben delimitierte DateFormats fehlende Teile von Daten und Zeiten, solange die vorhergehenden Teile angegeben sind. Die anderen Teile erhalten die üblichen Standardwerte. Zum Beispiel gibt Date("1981-03", dateformat"y-m-d") 1981-03-01 zurück, während Date("31/12", dateformat"d/m/y") 0001-12-31 ergibt. (Beachten Sie, dass das Standardjahr 1 n. Chr. ist.) Ein leerer String wirft jedoch immer einen ArgumentError.
Feste Breiten-Slots werden durch das wiederholte Zeichen des Punktes in der Anzahl angegeben, die der Breite entspricht, ohne Trennzeichen zwischen den Zeichen. So würde dateformat"yyyymmdd" einem Datumsstring wie "20140716" entsprechen. Der Parser unterscheidet einen festen Breiten-Slot durch das Fehlen eines Trennzeichens und bemerkt den Übergang "yyyymm" von einem Punktzeichen zum nächsten.
Die Unterstützung für die Verarbeitung von Monatsnamen in Textform wird ebenfalls durch die Zeichen u und U unterstützt, für abgekürzte bzw. vollständige Monatsnamen. Standardmäßig werden nur englische Monatsnamen unterstützt, sodass u "Jan", "Feb", "Mar" usw. entspricht. Und U entspricht "Januar", "Februar", "März" usw. Ähnlich wie bei anderen Name=>Wert-Zuordnungsfunktionen dayname und monthname können benutzerdefinierte Lokalisierungen geladen werden, indem die Zuordnung locale=>Dict{String,Int} an die Diktate MONTHTOVALUEABBR und MONTHTOVALUE für abgekürzte bzw. vollständige Monatsnamen übergeben wird.
Die obigen Beispiele verwendeten das dateformat"" String-Makro. Dieses Makro erstellt ein DateFormat-Objekt einmal, wenn das Makro erweitert wird, und verwendet dasselbe DateFormat-Objekt, selbst wenn ein Code-Snippet mehrmals ausgeführt wird.
julia> for i = 1:10^5
Date("2015-01-01", dateformat"y-m-d")
endOder Sie können das DateFormat-Objekt explizit erstellen:
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-02Alternativ können Sie Broadcasting verwenden:
julia> years = ["2015", "2016"];
julia> Date.(years, DateFormat("yyyy"))
2-element Vector{Date}:
2015-01-01
2016-01-01Zur Bequemlichkeit können Sie den Format-String direkt übergeben (z. B. Date("2015-01-01","y-m-d")), obwohl diese Form Leistungskosten verursacht, wenn Sie dasselbe Format wiederholt analysieren, da intern jedes Mal ein neues DateFormat-Objekt erstellt wird.
Sowohl über die Konstruktoren als auch über die Funktionen kann ein Date oder DateTime aus Strings erstellt werden, indem die Funktionen parse und tryparse verwendet werden, jedoch mit einem optionalen dritten Argument vom Typ DateFormat, das das Format angibt; zum Beispiel parse(Date, "06.23.2013", dateformat"m.d.y") oder tryparse(DateTime, "1999-12-31T23:59:59"), das das Standardformat verwendet. Der bemerkenswerte Unterschied zwischen den Funktionen besteht darin, dass bei 4d61726b646f776e2e436f64652822222c202274727970617273652229_40726566 kein Fehler ausgelöst wird, wenn der String leer oder in einem ungültigen Format vorliegt; stattdessen wird nothing zurückgegeben.
Vor Julia 1.9 konnten leere Strings ohne Fehler an Konstruktoren und parse übergeben werden, was entsprechend DateTime(1), Date(1) oder Time(0) zurückgab. Ebenso gab tryparse nicht nothing zurück.
Eine vollständige Suite von Parsing- und Formatierungstests sowie Beispielen ist verfügbar in stdlib/Dates/test/io.jl.
Durations/Comparisons
Die Bestimmung der Zeitspanne zwischen zwei Date oder DateTime ist einfach, wenn man ihre zugrunde liegende Darstellung als UTInstant{Day} und UTInstant{Millisecond} betrachtet. Der Unterschied zwischen 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 wird in der Anzahl von Day zurückgegeben, und 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 in der Anzahl von Millisecond. Ebenso ist der Vergleich von TimeType eine einfache Angelegenheit des Vergleichs der zugrunde liegenden Maschineninstanzen (die wiederum die internen Int64 Werte vergleicht).
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
Weil die Date und DateTime Typen als einzelne Int64 Werte gespeichert werden, können Datenteile oder Felder über Zugriffs-Funktionen abgerufen werden. Die Kleinbuchstaben-Zugriffs-Funktionen geben das Feld als Ganzzahl zurück:
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 daysKombinationsmethoden werden bereitgestellt, da es effizienter ist, mehrere Felder gleichzeitig als einzeln zuzugreifen:
julia> Dates.yearmonth(t)
(2014, 1)
julia> Dates.monthday(t)
(1, 31)
julia> Dates.yearmonthday(t)
(2014, 1, 31)Man kann auch auf den zugrunde liegenden UTInstant oder den ganzzahligen Wert zugreifen:
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
Abfragefunktionen bieten kalendarische Informationen über ein TimeType. Sie enthalten Informationen über den Wochentag:
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
5Monat des Jahres:
julia> Dates.monthname(t)
"January"
julia> Dates.daysinmonth(t)
31Ebenso wie Informationen über das Jahr und das Quartal von der TimeType:
julia> Dates.isleapyear(t)
false
julia> Dates.dayofyear(t)
31
julia> Dates.quarterofyear(t)
1
julia> Dates.dayofquarter(t)
31Die dayname und monthname Methoden können auch ein optionales locale Schlüsselwort annehmen, das verwendet werden kann, um den Namen des Tages oder Monats des Jahres für andere Sprachen/Regionen zurückzugeben. Es gibt auch Versionen dieser Funktionen, die die abgekürzten Namen zurückgeben, nämlich dayabbr und monthabbr. Zuerst wird die Zuordnung in die LOCALES Variable geladen:
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, [""]);Die oben genannten Funktionen können dann verwendet werden, um die Abfragen durchzuführen:
julia> Dates.dayname(t;locale="french")
"vendredi"
julia> Dates.monthname(t;locale="french")
"janvier"
julia> Dates.monthabbr(t;locale="french")
"janv"Da die abgekürzten Versionen der Tage nicht geladen sind, wird der Versuch, die Funktion dayabbr zu verwenden, einen Fehler auslösen.
julia> Dates.dayabbr(t;locale="french")
ERROR: BoundsError: attempt to access 1-element Vector{String} at index [5]
Stacktrace:
[...]TimeType-Period Arithmetic
Es ist eine gute Praxis, sich mit der Handhabung von Datums- und Zeitarithmetik in jedem Sprach-/Datumsrahmen vertraut zu machen, da es einige tricky issues zu berücksichtigen gibt (obwohl dies bei Datentypen mit Tagesgenauigkeit viel weniger der Fall ist).
Das Dates-Modul versucht, dem einfachen Prinzip zu folgen, so wenig wie möglich zu ändern, wenn es um Period-Arithmetik geht. Dieser Ansatz ist auch oft als kalendermäßige Arithmetik bekannt oder was Sie wahrscheinlich erraten würden, wenn jemand Sie in einem Gespräch nach derselben Berechnung fragen würde. Warum all der Aufruhr darüber? Lassen Sie uns ein klassisches Beispiel nehmen: Fügen Sie dem 31. Januar 2014 1 Monat hinzu. Was ist die Antwort? Javascript wird March 3 sagen (geht von 31 Tagen aus). PHP sagt March 2 (geht von 30 Tagen aus). Die Tatsache ist, dass es keine richtige Antwort gibt. Im Dates-Modul ergibt sich das Ergebnis des 28. Februar. Wie kommt es dazu? Betrachten Sie das klassische 7-7-7 Glücksspielspiel in Casinos.
Stellen Sie sich nun vor, dass anstelle von 7-7-7 die Slots Jahr-Monat-Tag sind, oder in unserem Beispiel, 2014-01-31. Wenn Sie zu diesem Datum 1 Monat hinzufügen möchten, wird der Monatsslot erhöht, sodass wir jetzt 2014-02-31 haben. Dann wird die Tageszahl überprüft, ob sie größer ist als der letzte gültige Tag des neuen Monats; wenn dies der Fall ist (wie im obigen Fall), wird die Tageszahl auf den letzten gültigen Tag (28) angepasst. Was sind die Folgen dieses Ansatzes? Gehen Sie voran und fügen Sie einen weiteren Monat zu unserem Datum hinzu, 2014-02-28 + Monat(1) == 2014-03-28. Was? Haben Sie den letzten Tag im März erwartet? Nein, tut mir leid, denken Sie an die 7-7-7-Slots. So wenige Slots wie möglich werden sich ändern, also erhöhen wir zuerst den Monatsslot um 1, 2014-03-28, und boom, wir sind fertig, weil das ein gültiges Datum ist. Andererseits, wenn wir 2 Monate zu unserem ursprünglichen Datum, 2014-01-31, hinzufügen würden, würden wir 2014-03-31 erhalten, wie erwartet. Die andere Folge dieses Ansatzes ist ein Verlust der Assoziativität, wenn eine bestimmte Reihenfolge erzwungen wird (d.h. das Hinzufügen von Dingen in unterschiedlichen Reihenfolgen führt zu unterschiedlichen Ergebnissen). Zum Beispiel:
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-01Was passiert dort? In der ersten Zeile fügen wir 1 Tag zum 29. Januar hinzu, was zu 2014-01-30 führt; dann fügen wir 1 Monat hinzu, sodass wir 2014-02-30 erhalten, was dann auf 2014-02-28 angepasst wird. Im zweiten Beispiel fügen wir zuerst 1 Monat hinzu, wo wir 2014-02-29 erhalten, was auf 2014-02-28 angepasst wird, und dann fügen wir 1 Tag hinzu, was zu 2014-03-01 führt. Ein Designprinzip, das in diesem Fall hilft, ist, dass bei mehreren Perioden die Operationen nach den Typen der Perioden und nicht nach ihrem Wert oder ihrer Position angeordnet werden; das bedeutet, dass Jahr immer zuerst hinzugefügt wird, dann Monat, dann Woche usw. Daher führt das Folgende zu Assoziativität und funktioniert einfach:
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-01Tricky? Vielleicht. Was soll ein unschuldiger Dates-Benutzer tun? Die Quintessenz ist, sich bewusst zu sein, dass das explizite Erzwingen einer bestimmten Assoziativität beim Umgang mit Monaten zu unerwarteten Ergebnissen führen kann, aber ansonsten sollte alles wie erwartet funktionieren. Glücklicherweise ist das so ziemlich das Ausmaß der seltsamen Fälle in der Datums-Perioden-Arithmetik beim Umgang mit Zeit in UT (und die "Freuden" des Umgangs mit Sommerzeit, Schaltsekunden usw. zu vermeiden).
Als Bonus funktionieren alle Zeitarithmetik-Objekte direkt mit Bereichen:
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
So praktisch die Datumsarithmetik auch ist, oft haben die Arten von Berechnungen, die für Daten benötigt werden, eine kalendermäßige oder temporale Natur, anstatt eine feste Anzahl von Perioden. Feiertage sind ein perfektes Beispiel; die meisten folgen Regeln wie "Memorial Day = Letzter Montag im Mai" oder "Thanksgiving = 4. Donnerstag im November". Diese Arten von temporalen Ausdrücken befassen sich mit Regeln, die relativ zum Kalender sind, wie erster oder letzter des Monats, nächster Dienstag oder die ersten und dritten Mittwoche usw.
Das Dates-Modul bietet die Adjuster-API über mehrere praktische Methoden, die dabei helfen, zeitliche Regeln einfach und prägnant auszudrücken. Die erste Gruppe von Adjuster-Methoden befasst sich mit dem ersten und letzten Tag von Wochen, Monaten, Quartalen und Jahren. Sie nehmen jeweils einen einzelnen TimeType als Eingabe und geben den ersten oder letzten Tag des gewünschten Zeitraums relativ zur Eingabe zurück oder passen sich an.
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-30Die nächsten beiden höherwertigen Methoden, tonext und toprev, verallgemeinern die Arbeit mit zeitlichen Ausdrücken, indem sie eine DateFunction als erstes Argument verwenden, zusammen mit einem Start-TimeType. Eine DateFunction ist einfach eine Funktion, normalerweise anonym, die ein einzelnes 4d61726b646f776e2e436f64652822222c202254696d65547970652229_40726566 als Eingabe nimmt und ein Bool zurückgibt, wobei true ein erfülltes Anpassungskriterium anzeigt. Zum Beispiel:
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-15Dies ist nützlich mit der do-Block-Syntax für komplexere zeitliche Ausdrücke:
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-27Die Base.filter Methode kann verwendet werden, um alle gültigen Daten/Momente in einem bestimmten Bereich zu erhalten:
# 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-11Zusätzliche Beispiele und Tests sind verfügbar in stdlib/Dates/test/adjusters.jl.
Period Types
Perioden sind eine menschliche Sicht auf diskrete, manchmal unregelmäßige Zeitdauern. Betrachten Sie 1 Monat; er könnte in Tagen einen Wert von 28, 29, 30 oder 31 darstellen, abhängig vom Jahr und Kontext des Monats. Oder ein Jahr könnte 365 oder 366 Tage im Falle eines Schaltjahres darstellen. Period-Typen sind einfache Int64-Wrapper und werden erstellt, indem man jeden Int64-konvertierbaren Typ umschließt, d.h. Year(1) oder Month(3.0). Arithmetik zwischen 4d61726b646f776e2e436f64652822222c2022506572696f642229_40726566 des gleichen Typs verhält sich wie ganze Zahlen, und eine begrenzte Period-Real-Arithmetik ist verfügbar. Sie können die zugrunde liegende ganze Zahl mit Dates.value extrahieren.
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))
10Die Darstellung von Zeiträumen oder Dauern, die keine ganzzahligen Vielfachen der grundlegenden Typen sind, kann mit dem Dates.CompoundPeriod-Typ erreicht werden. Zusammengesetzte Zeiträume können manuell aus einfachen Period-Typen erstellt werden. Darüber hinaus kann die canonicalize-Funktion verwendet werden, um einen Zeitraum in einen 4d61726b646f776e2e436f64652822222c202244617465732e436f6d706f756e64506572696f642229_40726566 zu zerlegen. Dies ist besonders nützlich, um eine Dauer, z. B. eine Differenz von zwei DateTime, in eine praktischere Darstellung zu konvertieren.
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 und DateTime Werte können auf eine bestimmte Auflösung (z. B. 1 Monat oder 15 Minuten) gerundet werden mit floor, ceil oder 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:00Im Gegensatz zur numerischen round Methode, die standardmäßig bei Gleichständen zur geraden Zahl tendiert, verwendet die TimeType4d61726b646f776e2e436f64652822222c2022726f756e642229_40726566 Methode den Rundungsmodus RoundNearestTiesUp. (Es ist schwierig zu erraten, was das Brechen von Gleichständen zur nächsten "geraden" 4d61726b646f776e2e436f64652822222c202254696d65547970652229_40726566 bedeuten würde.) Weitere Details zu den verfügbaren RoundingMode s finden Sie in der API reference.
Das Runden sollte im Allgemeinen wie erwartet funktionieren, aber es gibt einige Fälle, in denen das erwartete Verhalten nicht offensichtlich ist.
Rounding Epoch
In vielen Fällen teilt die für das Runden angegebene Auflösung (z. B. Dates.Second(30)) gleichmäßig in den nächstgrößeren Zeitraum (in diesem Fall Dates.Minute(1)). Das Rundungsverhalten in Fällen, in denen dies nicht zutrifft, kann jedoch zu Verwirrung führen. Was ist das erwartete Ergebnis des Rundens von DateTime auf die nächsten 10 Stunden?
julia> round(DateTime(2016, 7, 17, 11, 55), Dates.Hour(10))
2016-07-17T12:00:00Das mag verwirrend erscheinen, da die Stunde (12) nicht durch 10 teilbar ist. Der Grund, warum 2016-07-17T12:00:00 gewählt wurde, ist, dass es 17.676.660 Stunden nach 0000-01-01T00:00:00 ist, und 17.676.660 ist durch 10 teilbar.
Da Julia Date und DateTime Werte gemäß dem ISO 8601 Standard dargestellt werden, wurde 0000-01-01T00:00:00 als Basis (oder "Rundungs-Epoche") gewählt, von der aus die Zählung der Tage (und Millisekunden) für Rundungsberechnungen beginnt. (Beachten Sie, dass dies leicht von Julias interner Darstellung von 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 abweicht, die Rata Die notation verwendet; aber da der ISO 8601 Standard für den Endbenutzer am sichtbarsten ist, wurde 0000-01-01T00:00:00 als Rundungs-Epoche gewählt, anstelle des intern verwendeten 0000-12-31T00:00:00, um Verwirrung zu minimieren.)
Die einzige Ausnahme von der Verwendung von 0000-01-01T00:00:00 als Rundungs-Epoche ist das Runden auf Wochen. Das Runden auf die nächste Woche gibt immer einen Montag zurück (den ersten Tag der Woche, wie von ISO 8601 festgelegt). Aus diesem Grund verwenden wir 0000-01-03T00:00:00 (den ersten Tag der ersten Woche des Jahres 0000, wie von ISO 8601 definiert) als Basis, wenn wir auf eine Anzahl von Wochen runden.
Hier ist ein verwandter Fall, in dem das erwartete Verhalten nicht unbedingt offensichtlich ist: Was passiert, wenn wir auf das nächste P(2) runden, wobei P ein Period-Typ ist? In einigen Fällen (insbesondere, wenn P <: Dates.TimePeriod) ist die Antwort klar:
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:00Das scheint offensichtlich zu sein, da zwei von jedem dieser Zeiträume immer noch gleichmäßig in den nächsten größeren Ordnungszeitraum unterteilt werden. Aber im Fall von zwei Monaten (die immer noch gleichmäßig in ein Jahr unterteilt werden) könnte die Antwort überraschend sein:
julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Month(2))
2016-07-01T00:00:00Warum auf den ersten Tag im Juli runden, obwohl es der Monat 7 (eine ungerade Zahl) ist? Der Schlüssel ist, dass Monate 1-indiziert sind (der erste Monat wird mit 1 zugewiesen), im Gegensatz zu Stunden, Minuten, Sekunden und Millisekunden (die erste davon wird mit 0 zugewiesen).
Das bedeutet, dass das Runden eines DateTime auf ein gerades Vielfaches von Sekunden, Minuten, Stunden oder Jahren (da die ISO 8601-Spezifikation ein Jahr null umfasst) zu einem 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 mit einem geraden Wert in diesem Feld führen wird, während das Runden eines 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 auf ein gerades Vielfaches von Monaten dazu führen wird, dass das Monatsfeld einen ungeraden Wert hat. Da sowohl Monate als auch Jahre eine unregelmäßige Anzahl von Tagen enthalten können, ist ungewiss, ob das Runden auf eine gerade Anzahl von Tagen zu einem geraden Wert im Tagesfeld führen wird.
Siehe die API reference für zusätzliche Informationen zu den Methoden, die aus dem Dates-Modul exportiert werden.
API reference
Dates and Time Types
Dates.Period — TypePeriode
Jahr
Quartal
Monat
Woche
Tag
Stunde
Minute
Sekunde
Millisekunde
Mikrosekunde
NanosekundePeriod-Typen repräsentieren diskrete, menschliche Darstellungen von Zeit.
Dates.CompoundPeriod — TypeCompoundPeriodEin CompoundPeriod ist nützlich, um Zeiträume auszudrücken, die kein fester Vielfaches kleinerer Zeiträume sind. Zum Beispiel ist "ein Jahr und ein Tag" keine feste Anzahl von Tagen, kann aber mit einem CompoundPeriod ausgedrückt werden. Tatsächlich wird ein CompoundPeriod automatisch durch die Addition verschiedener Zeitraumtypen erzeugt, z.B. Year(1) + Day(1) ergibt ein CompoundPeriod-Ergebnis.
Dates.Instant — TypeInstantInstant-Typen repräsentieren ganzzahlige, maschinelle Darstellungen von Zeit als kontinuierliche Zeitlinien, die von einem Epoch beginnen.
Dates.UTInstant — TypeUTInstant{T}Der UTInstant repräsentiert eine Maschinenzeitleiste basierend auf UT-Zeit (1 Tag = eine Umdrehung der Erde). Das T ist ein Period-Parameter, der die Auflösung oder Präzision des Moments angibt.
Dates.TimeType — TypeTimeTypeTimeType-Typen umhüllen Instant-Maschineninstanzen, um menschliche Darstellungen des Maschineninstants bereitzustellen. Time, DateTime und Date sind Subtypen von TimeType.
Dates.DateTime — TypeDateTimeDateTime repräsentiert einen Zeitpunkt gemäß dem proleptischen Gregorianischen Kalender. Die feinste Auflösung der Zeit ist Millisekunde (d.h. Mikrosekunden oder Nanosekunden können von diesem Typ nicht dargestellt werden). Der Typ unterstützt Festkommaarithmetik und ist daher anfällig für Unterlauf (und Überlauf). Eine bemerkenswerte Folge ist das Runden beim Hinzufügen einer Microsecond oder einer Nanosecond:
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 gerundet auf 1000us
2023-08-19T17:45:32.901
julia> dt + Microsecond(1499) # 1499 gerundet auf 1000us
2023-08-19T17:45:32.901Dates.Date — TypeDatumDatum umschließt ein UTInstant{Tag} und interpretiert es gemäß dem proleptischen Gregorianischen Kalender.
Dates.Time — TypeZeitZeit umschließt eine Nanosekunde und repräsentiert einen bestimmten Moment in einem 24-Stunden-Tag.
Dates.TimeZone — TypeZeitzoneGeografische Zone, die im Allgemeinen auf der Längengrad basiert und bestimmt, wie spät es an einem bestimmten Ort ist. Einige Zeitzonen beachten die Sommerzeit (z. B. EST -> EDT). Für Implementierungen und weitere Unterstützung siehe das TimeZones.jl Paket.
Dates.UTC — TypeUTCUTC, oder Koordinierte Weltzeit, ist die TimeZone, von der alle anderen gemessen werden. Sie ist mit der Zeit bei 0° Länge verbunden. Sie wird nicht für die Sommerzeit angepasst.
Dates Functions
Dates.DateTime — MethodDateTime(y, [m, d, h, mi, s, ms]) -> DateTimeKonstruiere einen DateTime-Typ aus Teilen. Die Argumente müssen in Int64 umwandelbar sein.
Dates.DateTime — MethodDateTime(periods::Period...) -> DateTimeKonstruiere einen DateTime-Typ aus Period-Typteilen. Die Argumente können in beliebiger Reihenfolge angegeben werden. Nicht bereitgestellte DateTime-Teile haben den Standardwert Dates.default(period).
Dates.DateTime — MethodDateTime(f::Function, y[, m, d, h, mi, s]; step=Day(1), limit=10000) -> DateTimeErstellen Sie ein DateTime über die Adjuster-API. Der Ausgangspunkt wird aus den bereitgestellten y, m, d...-Argumenten konstruiert und wird angepasst, bis f::Function true zurückgibt. Die Schrittgröße bei der Anpassung kann manuell über das Schlüsselwort step bereitgestellt werden. limit gibt eine Grenze für die maximale Anzahl von Iterationen an, die die Anpassungs-API verfolgen wird, bevor ein Fehler ausgelöst wird (im Falle, dass f::Function niemals erfüllt wird).
Beispiele
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: Anpassungsgrenze erreicht: 5 Iterationen
Stacktrace:
[...]Dates.DateTime — MethodDateTime(dt::Date) -> DateTimeKonvertiert ein Date in ein DateTime. Die Stunden-, Minuten-, Sekunden- und Millisekundenanteile des neuen DateTime werden als null angenommen.
Dates.DateTime — MethodDateTime(dt::AbstractString, format::AbstractString; locale="deutsch") -> DateTimeKonstruiere ein DateTime, indem der dt Datumszeit-String gemäß dem Muster im format-String geparst wird (siehe DateFormat für die Syntax).
!!! Hinweis Diese Methode erstellt jedes Mal ein DateFormat-Objekt, wenn sie aufgerufen wird. Es wird empfohlen, stattdessen ein DateFormat Objekt zu erstellen und dieses als zweiten Parameter zu verwenden, um Leistungsverluste bei wiederholter Verwendung des gleichen Formats zu vermeiden.
Beispiele
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] # bevorzugt
2-element Vector{DateTime}:
2020-01-01T00:00:00
2020-01-02T00:00:00Dates.format — Methodformat(dt::TimeType, format::AbstractString; locale="deutsch") -> AbstractStringKonstruiere einen String, indem du ein TimeType-Objekt verwendest und das bereitgestellte format anwendest. Die folgenden Zeichencodes können verwendet werden, um den format-String zu erstellen:
| Code | Beispiele | Kommentar |
|---|---|---|
y | 6 | Numerisches Jahr mit fester Breite |
Y | 1996 | Numerisches Jahr mit minimaler Breite |
m | 1, 12 | Numerischer Monat mit minimaler Breite |
u | Jan | Monatsname auf 3 Zeichen verkürzt gemäß dem locale |
U | Januar | Vollständiger Monatsname gemäß dem locale-Schlüssel |
d | 1, 31 | Tag des Monats mit minimaler Breite |
H | 0, 23 | Stunde (24-Stunden-Format) mit minimaler Breite |
M | 0, 59 | Minute mit minimaler Breite |
S | 0, 59 | Sekunde mit minimaler Breite |
s | 000, 500 | Millisekunde mit einer minimalen Breite von 3 |
e | Mo, Di | Abgekürzte Wochentage |
E | Montag | Vollständiger Name des Wochentags |
Die Anzahl der aufeinanderfolgenden Codezeichen gibt die Breite des Codes an. Ein Format von yyyy-mm gibt an, dass der Code y eine Breite von vier haben sollte, während m eine Breite von zwei hat. Codes, die numerische Ziffern ergeben, haben einen zugehörigen Modus: feste Breite oder minimale Breite. Der Modus mit fester Breite füllt den Wert mit Nullen auf, wenn er kürzer als die angegebene Breite ist, und kürzt den Wert, wenn er länger ist. Der Modus mit minimaler Breite funktioniert genauso wie der Modus mit fester Breite, außer dass er Werte, die länger als die Breite sind, nicht kürzt.
Beim Erstellen eines format kannst du beliebige Nicht-Code-Zeichen als Trennzeichen verwenden. Um beispielsweise den String "1996-01-15T00:00:00" zu erzeugen, könntest du format: "yyyy-mm-ddTHH:MM:SS" verwenden. Beachte, dass du, wenn du ein Codezeichen als Literal verwenden musst, das Escape-Zeichen Backslash verwenden kannst. Der String "1996y01m" kann mit dem Format "yyyy\ymm\m" erzeugt werden.
Dates.DateFormat — TypeDateFormat(format::AbstractString, locale="deutsch") -> DateFormatKonstruiere ein Datumsformatierungsobjekt, das zum Parsen von Datumszeichenfolgen oder zum Formatieren eines Datumsobjekts als Zeichenfolge verwendet werden kann. Die folgenden Zeichencodes können verwendet werden, um die format-Zeichenfolge zu erstellen:
| Code | Entspricht | Kommentar |
|---|---|---|
Y | 1996, 96 | Gibt das Jahr 1996, 0096 zurück |
y | 1996, 96 | Dasselbe wie Y bei parse, verwirft jedoch überschüssige Ziffern bei format |
m | 1, 01 | Entspricht 1- oder 2-stelligen Monaten |
u | Jan | Entspricht abgekürzten Monaten gemäß dem locale-Schlüsselwort |
U | Januar | Entspricht vollständigen Monatsnamen gemäß dem locale-Schlüsselwort |
d | 1, 01 | Entspricht 1- oder 2-stelligen Tagen |
H | 00 | Entspricht Stunden (24-Stunden-Format) |
I | 00 | Zum Ausgeben von Stunden im 12-Stunden-Format |
M | 00 | Entspricht Minuten |
S | 00 | Entspricht Sekunden |
s | .500 | Entspricht Millisekunden |
e | Mo, Di | Entspricht abgekürzten Wochentagen |
E | Montag | Entspricht vollständigen Wochentagen |
p | AM | Entspricht AM/PM (nicht groß-/kleinschreibungssensitiv) |
yyyymmdd | 19960101 | Entspricht festbreitigem Jahr, Monat und Tag |
Zeichen, die oben nicht aufgeführt sind, werden normalerweise als Trennzeichen zwischen Datum und Uhrzeit behandelt. Beispielsweise hätte eine dt-Zeichenfolge von "1996-01-15T00:00:00.0" eine format-Zeichenfolge wie "y-m-dTH:M:S.s". Wenn du einen Code-Zeichensatz als Trennzeichen verwenden musst, kannst du ihn mit einem Backslash escapen. Das Datum "1995y01m" hätte das Format "y\ym\m".
Beachte, dass 12:00AM 00:00 (Mitternacht) entspricht und 12:00PM 12:00 (Mittag) entspricht. Beim Parsen einer Zeit mit einem p-Spezifizierer wird jede Stunde (entweder H oder I) als 12-Stunden-Format interpretiert, sodass der I-Code hauptsächlich für die Ausgabe nützlich ist.
Das Erstellen eines DateFormat-Objekts ist kostspielig. Wann immer möglich, erstelle es einmal und verwende es viele Male oder versuche das dateformat"" String-Makro. Die Verwendung dieses Makros erstellt das DateFormat-Objekt einmal zur Makroerweiterungszeit und verwendet es später wieder. Es gibt auch mehrere vordefinierte Formatter, die später aufgelistet sind.
Siehe DateTime und format für Informationen zur Verwendung eines DateFormat-Objekts zum Parsen und Schreiben von Datumszeichenfolgen.
Dates.@dateformat_str — Macrodateformat"Y-m-d H:M:S"Erstellen Sie ein DateFormat Objekt. Ähnlich wie DateFormat("Y-m-d H:M:S"), aber erstellt das DateFormat-Objekt einmal während der Makroerweiterung.
Siehe DateFormat für Details zu Formatbezeichnern.
Dates.DateTime — MethodDateTime(dt::AbstractString, df::DateFormat=ISODateTimeFormat) -> DateTimeKonstruiere ein DateTime, indem der dt Datumszeit-String gemäß dem Muster im DateFormat Objekt geparst wird, oder dateformat"yyyy-mm-dd\THH:MM:SS.s", wenn weggelassen.
Ähnlich wie DateTime(::AbstractString, ::AbstractString), aber effizienter, wenn wiederholt ähnlich formatierte Datumszeit-Strings mit einem vorab erstellten DateFormat Objekt geparst werden.
Dates.Date — MethodDate(y, [m, d]) -> DateKonstruiere einen Date-Typ aus Teilen. Die Argumente müssen in Int64 umwandelbar sein.
Dates.Date — MethodDate(period::Period...) -> DateKonstruiere einen Date-Typ aus Period-Typteilen. Die Argumente können in beliebiger Reihenfolge angegeben werden. Date-Teile, die nicht bereitgestellt werden, haben den Standardwert von Dates.default(period).
Dates.Date — MethodDate(f::Function, y[, m, d]; step=Day(1), limit=10000) -> DateErstellen Sie ein Date über die Adjuster-API. Der Ausgangspunkt wird aus den bereitgestellten y, m, d-Argumenten konstruiert und wird angepasst, bis f::Function true zurückgibt. Die Schrittgröße bei der Anpassung kann manuell über das Schlüsselwort step bereitgestellt werden. limit gibt eine Grenze für die maximale Anzahl von Iterationen an, die die Anpassungs-API verfolgen wird, bevor ein Fehler ausgelöst wird (vorausgesetzt, dass f::Function niemals erfüllt wird).
Beispiele
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: Anpassungsgrenze erreicht: 5 Iterationen
Stacktrace:
[...]Dates.Date — MethodDate(dt::DateTime) -> DateKonvertiert ein DateTime in ein Date. Die Stunden-, Minuten-, Sekunden- und Millisekundenanteile des DateTime werden abgeschnitten, sodass nur die Jahr-, Monat- und Tagesanteile für die Konstruktion verwendet werden.
Dates.Date — MethodDate(d::AbstractString, format::AbstractString; locale="deutsch") -> DateKonstruiere ein Date, indem der d Datumsstring gemäß dem Muster im format String geparst wird (siehe DateFormat für die Syntax).
!!! Hinweis Diese Methode erstellt jedes Mal ein DateFormat Objekt, wenn sie aufgerufen wird. Es wird empfohlen, stattdessen ein DateFormat Objekt zu erstellen und dieses als zweiten Parameter zu verwenden, um Leistungsverluste bei wiederholter Verwendung des gleichen Formats zu vermeiden.
Beispiele
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] # bevorzugt
2-element Vector{Date}:
2020-01-01
2020-01-02Dates.Date — MethodDate(d::AbstractString, df::DateFormat=ISODateFormat) -> DateKonstruiere ein Date, indem der Datumsstring d gemäß dem Muster des DateFormat-Objekts geparst wird, oder dateformat"yyyy-mm-dd", wenn weggelassen.
Ähnlich wie Date(::AbstractString, ::AbstractString), aber effizienter, wenn wiederholt ähnlich formatierte Datumsstrings mit einem vorab erstellten DateFormat-Objekt geparst werden.
Dates.Time — MethodTime(h, [mi, s, ms, us, ns]) -> TimeKonstruiere einen Time-Typ aus Teilen. Die Argumente müssen in Int64 umwandelbar sein.
Dates.Time — MethodTime(period::TimePeriod...) -> TimeKonstruiere einen Time-Typ aus Period-Typteilen. Die Argumente können in beliebiger Reihenfolge angegeben werden. Time-Teile, die nicht bereitgestellt werden, haben den Standardwert von 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)Erstellen Sie eine Time über die Adjuster-API. Der Ausgangspunkt wird aus den bereitgestellten h, mi, s, ms, us-Argumenten konstruiert und wird angepasst, bis f::Function true zurückgibt. Die Schrittgröße bei der Anpassung kann manuell über das Schlüsselwort step bereitgestellt werden. limit gibt eine Grenze für die maximale Anzahl von Iterationen an, die die Anpassungs-API verfolgen wird, bevor ein Fehler ausgelöst wird (im Falle, dass f::Function niemals erfüllt wird). Beachten Sie, dass der Standard-Schritt so angepasst wird, dass eine höhere Präzision für die gegebenen Argumente ermöglicht wird; d.h. wenn Stunden-, Minuten- und Sekundenargumente bereitgestellt werden, wird der Standard-Schritt Millisecond(1) anstelle von Second(1) sein.
Beispiele
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: Anpassungsgrenze erreicht: 5 Iterationen
Stacktrace:
[...]Dates.Time — MethodTime(dt::DateTime) -> TimeKonvertiert ein DateTime in eine Time. Die Stunden-, Minuten-, Sekunden- und Millisekundenanteile des DateTime werden verwendet, um die neue Time zu erstellen. Mikrosekunden und Nanosekunden sind standardmäßig null.
Dates.Time — MethodTime(t::AbstractString, format::AbstractString; locale="deutsch") -> TimeKonstruiere eine Time, indem der t Zeitstring gemäß dem Muster im format String geparst wird (siehe DateFormat für die Syntax).
!!! Hinweis Diese Methode erstellt jedes Mal ein DateFormat Objekt, wenn sie aufgerufen wird. Es wird empfohlen, stattdessen ein DateFormat Objekt zu erstellen und dieses als zweiten Parameter zu verwenden, um Leistungsverluste bei wiederholter Verwendung des gleichen Formats zu vermeiden.
Beispiele
julia> Time("12:34pm", "HH:MMp")
12:34:00
julia> a = ("12:34pm", "2:34am");
julia> [Time(d, dateformat"HH:MMp") for d ∈ a] # bevorzugt
2-element Vector{Time}:
12:34:00
02:34:00Dates.Time — MethodTime(t::AbstractString, df::DateFormat=ISOTimeFormat) -> TimeKonstruiere eine Time, indem der t Datumszeit-String gemäß dem Muster im DateFormat Objekt geparst wird, oder dateformat"HH:MM:SS.s", wenn weggelassen.
Ähnlich wie Time(::AbstractString, ::AbstractString), aber effizienter, wenn wiederholt ähnlich formatierte Zeitstrings mit einem vorab erstellten DateFormat Objekt geparst werden.
Dates.now — Methodnow() -> DateTimeGibt ein DateTime zurück, das der Systemzeit des Benutzers einschließlich der Zeitzonenlokalisierung des Systems entspricht.
Dates.now — Methodnow(::Type{UTC}) -> DateTimeGibt ein DateTime zurück, das der Systemzeit des Benutzers als UTC/GMT entspricht. Für andere Zeitzonen siehe das TimeZones.jl-Paket.
Beispiele
julia> now(UTC)
2023-01-04T10:52:24.864Base.eps — Methodeps(::Type{DateTime}) -> Millisekunde
eps(::Type{Date}) -> Tag
eps(::Type{Time}) -> Nanosekunde
eps(::TimeType) -> ZeitraumGibt den kleinsten unterstützten Wert der Einheit für den TimeType zurück.
Beispiele
julia> eps(DateTime)
1 Millisekunde
julia> eps(Date)
1 Tag
julia> eps(Time)
1 NanosekundeAccessor Functions
Dates.year — Functionyear(dt::TimeType) -> Int64Das Jahr eines Date oder DateTime als Int64.
Dates.month — Functionmonth(dt::TimeType) -> Int64Der Monat eines Date oder DateTime als Int64.
Dates.week — Functionweek(dt::TimeType) -> Int64Gibt die ISO-Wochendatum eines Date oder DateTime als Int64 zurück. Beachten Sie, dass die erste Woche eines Jahres die Woche ist, die den ersten Donnerstag des Jahres enthält, was dazu führen kann, dass Daten vor dem 4. Januar in der letzten Woche des vorherigen Jahres liegen. Zum Beispiel ist week(Date(2005, 1, 1)) die 53. Woche von 2004.
Beispiele
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) -> Int64Der Tag des Monats eines Date oder DateTime als Int64.
Dates.hour — Functionhour(dt::DateTime) -> Int64Die Stunde des Tages eines DateTime als Int64.
hour(t::Time) -> Int64Die Stunde eines Time als Int64.
Dates.minute — Functionminute(dt::DateTime) -> Int64Die Minute eines DateTime als Int64.
minute(t::Time) -> Int64Die Minute eines Time als Int64.
Dates.second — Functionsecond(dt::DateTime) -> Int64Die Sekunde eines DateTime als Int64.
second(t::Time) -> Int64Die Sekunde eines Time als Int64.
Dates.millisecond — Functionmillisecond(dt::DateTime) -> Int64Die Millisekunde eines DateTime als Int64.
millisecond(t::Time) -> Int64Die Millisekunde eines Time als ein Int64.
Dates.microsecond — Functionmikrosekunde(t::Zeit) -> Int64Die Mikrosekunde einer Zeit als Int64.
Dates.nanosecond — Functionnanosecond(t::Time) -> Int64Die Nanosekunde eines Time als Int64.
Dates.Year — MethodYear(v)Konstruiere ein Year-Objekt mit dem gegebenen v-Wert. Die Eingabe muss verlustfrei in ein Int64 umwandelbar sein.
Dates.Month — MethodMonth(v)Konstruiere ein Month-Objekt mit dem gegebenen v-Wert. Die Eingabe muss verlustfrei in ein Int64 umwandelbar sein.
Dates.Week — MethodWeek(v)Konstruiere ein Week-Objekt mit dem gegebenen v-Wert. Die Eingabe muss verlustfrei in ein Int64 umwandelbar sein.
Dates.Day — MethodDay(v)Konstruiere ein Day-Objekt mit dem gegebenen v-Wert. Die Eingabe muss verlustfrei in ein Int64 umwandelbar sein.
Dates.Hour — MethodHour(dt::DateTime) -> StundeDer Stundenanteil eines DateTime als Stunde.
Dates.Minute — MethodMinute(dt::DateTime) -> MinuteDer Minutenanteil eines DateTime als Minute.
Dates.Second — MethodSecond(dt::DateTime) -> SecondDer zweite Teil eines DateTime als Second.
Dates.Millisecond — MethodMillisekunde(dt::DateTime) -> MillisekundeDer Millisekundenanteil eines DateTime als Millisekunde.
Dates.Microsecond — MethodMicrosecond(dt::Time) -> MikrosekundeDer Mikrosekundenanteil einer Zeit als Mikrosekunde.
Dates.Nanosecond — MethodNanosecond(dt::Time) -> NanosecondDer Nanosekundenanteil einer Zeit als Nanosecond.
Dates.yearmonth — Functionyearmonth(dt::TimeType) -> (Int64, Int64)Gibt gleichzeitig die Jahr- und Monatsanteile eines Date oder DateTime zurück.
Dates.monthday — Functionmonthday(dt::TimeType) -> (Int64, Int64)Gibt gleichzeitig die Monats- und Tagesanteile eines Date oder DateTime zurück.
Dates.yearmonthday — Functionyearmonthday(dt::TimeType) -> (Int64, Int64, Int64)Gibt gleichzeitig die Jahr-, Monat- und Tagesteile eines Date oder DateTime zurück.
Query Functions
Dates.dayname — Functiondayname(dt::TimeType; locale="deutsch") -> String
dayname(day::Integer; locale="deutsch") -> StringGibt den vollständigen Namen des Wochentags entsprechend dem Wochentag des Date oder DateTime im angegebenen locale zurück. Akzeptiert auch Integer.
Beispiele
julia> dayname(Date("2000-01-01"))
"Samstag"
julia> dayname(4)
"Donnerstag"Dates.dayabbr — Functiondayabbr(dt::TimeType; locale="deutsch") -> String
dayabbr(day::Integer; locale="deutsch") -> StringGibt den abgekürzten Namen des Wochentags des Date oder DateTime im angegebenen locale zurück. Akzeptiert auch Integer.
Beispiele
julia> dayabbr(Date("2000-01-01"))
"Sa"
julia> dayabbr(3)
"Mi"Dates.dayofweek — Functiondayofweek(dt::TimeType) -> Int64Gibt den Wochentag als Int64 zurück, wobei 1 = Montag, 2 = Dienstag, usw..
Beispiele
julia> dayofweek(Date("2000-01-01"))
6Dates.dayofmonth — Functiondayofmonth(dt::TimeType) -> Int64Der Tag des Monats eines Date oder DateTime als Int64.
Dates.dayofweekofmonth — Functiondayofweekofmonth(dt::TimeType) -> IntFür den Wochentag von dt gibt es die Nummer, die er im Monat von dt hat. Wenn der Wochentag von dt Montag ist, dann ist 1 = Erster Montag des Monats, 2 = Zweiter Montag des Monats, usw. Im Bereich 1:5.
Beispiele
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) -> IntFür den Wochentag von dt gibt die Funktion die Gesamtzahl dieses Wochentags im Monat von dt zurück. Gibt 4 oder 5 zurück. Nützlich in zeitlichen Ausdrücken, um den letzten Tag einer Woche in einem Monat anzugeben, indem dayofweekofmonth(dt) == daysofweekinmonth(dt) in der Anpassungsfunktion enthalten ist.
Beispiele
julia> daysofweekinmonth(Date("2005-01-01"))
5
julia> daysofweekinmonth(Date("2005-01-04"))
4Dates.monthname — Functionmonthname(dt::TimeType; locale="deutsch") -> String
monthname(month::Integer, locale="deutsch") -> StringGibt den vollständigen Namen des Monats des Date oder DateTime oder Integer im angegebenen locale zurück.
Beispiele
julia> monthname(Date("2005-01-04"))
"Januar"
julia> monthname(2)
"Februar"Dates.monthabbr — Functionmonthabbr(dt::TimeType; locale="deutsch") -> String
monthabbr(month::Integer, locale="deutsch") -> StringGibt den abgekürzten Monatsnamen des Date oder DateTime oder Integer im angegebenen locale zurück.
Beispiele
julia> monthabbr(Date("2005-01-04"))
"Jan"
julia> monthabbr(2)
"Feb"Dates.daysinmonth — Functiondaysinmonth(dt::TimeType) -> IntGibt die Anzahl der Tage im Monat von dt zurück. Der Wert kann 28, 29, 30 oder 31 sein.
Beispiele
julia> daysinmonth(Date("2000-01"))
31
julia> daysinmonth(Date("2001-02"))
28
julia> daysinmonth(Date("2000-02"))
29Dates.isleapyear — Functionisleapyear(dt::TimeType) -> BoolGibt true zurück, wenn das Jahr von dt ein Schaltjahr ist.
Beispiele
julia> isleapyear(Date("2004"))
true
julia> isleapyear(Date("2005"))
falseDates.dayofyear — Functiondayofyear(dt::TimeType) -> IntGibt den Tag des Jahres für dt zurück, wobei der 1. Januar Tag 1 ist.
Dates.daysinyear — Functiondaysinyear(dt::TimeType) -> IntGibt 366 zurück, wenn das Jahr von dt ein Schaltjahr ist, andernfalls gibt es 365 zurück.
Beispiele
julia> daysinyear(1999)
365
julia> daysinyear(2000)
366Dates.quarterofyear — Functionquarterofyear(dt::TimeType) -> IntGibt das Quartal zurück, in dem sich dt befindet. Der Wertebereich ist 1:4.
Dates.dayofquarter — Functiondayofquarter(dt::TimeType) -> IntGibt den Tag des aktuellen Quartals von dt zurück. Der Wertebereich ist 1:92.
Adjuster Functions
Base.trunc — Methodtrunc(dt::TimeType, ::Type{Period}) -> TimeTypeTrunkiert den Wert von dt gemäß dem angegebenen Period-Typ.
Beispiele
julia> trunc(DateTime("1996-01-01T12:30:00"), Day)
1996-01-01T00:00:00Dates.firstdayofweek — Functionfirstdayofweek(dt::TimeType) -> TimeTypePasst dt auf den Montag seiner Woche an.
Beispiele
julia> firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00Dates.lastdayofweek — Functionlastdayofweek(dt::TimeType) -> TimeTypePasst dt auf den Sonntag seiner Woche an.
Beispiele
julia> lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00Dates.firstdayofmonth — Functionfirstdayofmonth(dt::TimeType) -> TimeTypePasst dt auf den ersten Tag seines Monats an.
Beispiele
julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00Dates.lastdayofmonth — Functionlastdayofmonth(dt::TimeType) -> TimeTypePasst dt auf den letzten Tag seines Monats an.
Beispiele
julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00Dates.firstdayofyear — Functionfirstdayofyear(dt::TimeType) -> TimeTypePasst dt auf den ersten Tag seines Jahres an.
Beispiele
julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00Dates.lastdayofyear — Functionlastdayofyear(dt::TimeType) -> TimeTypePasst dt auf den letzten Tag seines Jahres an.
Beispiele
julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00Dates.firstdayofquarter — Functionfirstdayofquarter(dt::TimeType) -> TimeTypePasst dt auf den ersten Tag seines Quartals an.
Beispiele
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) -> TimeTypePasst dt auf den letzten Tag seines Quartals an.
Beispiele
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) -> TimeTypePasst dt auf den nächsten Wochentag entsprechend dow an, wobei 1 = Montag, 2 = Dienstag, usw. Das Setzen von same=true ermöglicht es, dass das aktuelle dt als der nächste dow betrachtet wird, sodass keine Anpassung erfolgt.
Dates.toprev — Methodtoprev(dt::TimeType, dow::Int; same::Bool=false) -> TimeTypePasst dt auf den vorherigen Wochentag entsprechend dow an, wobei 1 = Montag, 2 = Dienstag, usw. Die Einstellung same=true ermöglicht es, dass das aktuelle dt als der vorherige dow betrachtet wird, sodass keine Anpassung erfolgt.
Dates.tofirst — Functiontofirst(dt::TimeType, dow::Int; of=Month) -> TimeTypePasst dt auf den ersten dow seines Monats an. Alternativ wird of=Year auf den ersten dow des Jahres angepasst.
Dates.tolast — Functiontolast(dt::TimeType, dow::Int; of=Monat) -> TimeTypePasst dt auf den letzten dow seines Monats an. Alternativ wird of=Jahr auf den letzten dow des Jahres angepasst.
Dates.tonext — Methodtonext(func::Function, dt::TimeType; step=Day(1), limit=10000, same=false) -> TimeTypePasst dt an, indem es höchstens limit Iterationen mit step Inkrementen durchführt, bis func true zurückgibt. func muss ein einzelnes TimeType Argument annehmen und einen Bool zurückgeben. same erlaubt es, dt bei der Erfüllung von func zu berücksichtigen.
Dates.toprev — Methodtoprev(func::Function, dt::TimeType; step=Day(-1), limit=10000, same=false) -> TimeTypePasst dt an, indem es höchstens limit Iterationen mit step Inkrementen durchläuft, bis func true zurückgibt. func muss ein einzelnes TimeType Argument annehmen und einen Bool zurückgeben. same erlaubt es, dt bei der Erfüllung von func zu berücksichtigen.
Periods
Dates.Period — MethodJahr(v)
Quartal(v)
Monat(v)
Woche(v)
Tag(v)
Stunde(v)
Minute(v)
Sekunde(v)
Millisekunde(v)
Mikrosekunde(v)
Nanosekunde(v)Konstruiere einen Period-Typ mit dem gegebenen v-Wert. Die Eingabe muss verlustfrei in ein Int64 umwandelbar sein.
Dates.CompoundPeriod — MethodCompoundPeriod(periods) -> CompoundPeriodKonstruiere eine CompoundPeriod aus einem Vector von Periods. Alle Periods desselben Typs werden zusammenaddiert.
Beispiele
julia> Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13))
25 Stunden
julia> Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1))
-1 Stunde, 1 Minute
julia> Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2))
1 Monat, -2 Wochen
julia> Dates.CompoundPeriod(Dates.Minute(50000))
50000 MinutenDates.canonicalize — Functioncanonicalize(::CompoundPeriod) -> CompoundPeriodReduziert die CompoundPeriod in ihre kanonische Form, indem die folgenden Regeln angewendet werden:
- Jede
Period, die groß genug ist, um teilweise durch eine gröberePerioddargestellt zu werden, wird in mehrerePeriods zerlegt (z. B. wirdHour(30)zuDay(1) + Hour(6)) Periods mit entgegengesetzten Vorzeichen werden, wenn möglich, kombiniert (z. B. wirdHour(1) - Day(1)zu-Hour(23))
Beispiele
julia> canonicalize(Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13)))
1 Tag, 1 Stunde
julia> canonicalize(Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1)))
-59 Minuten
julia> canonicalize(Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2)))
1 Monat, -2 Wochen
julia> canonicalize(Dates.CompoundPeriod(Dates.Minute(50000)))
4 Wochen, 6 Tage, 17 Stunden, 20 MinutenDates.value — FunctionDates.value(x::Period) -> Int64Für einen gegebenen Zeitraum gibt den Wert zurück, der mit diesem Zeitraum verbunden ist. Zum Beispiel gibt value(Millisecond(10)) 10 als Ganzzahl zurück.
Dates.default — Functiondefault(p::Period) -> PeriodGeben Sie einen sinnvollen "Standard"-Wert für den Eingabezeitraum zurück, indem Sie T(1) für Jahr, Monat und Tag und T(0) für Stunde, Minute, Sekunde und Millisekunde zurückgeben.
Dates.periods — FunctionDates.periods(::CompoundPeriod) -> Vector{Period}Gibt den Vector von Periods zurück, die den gegebenen CompoundPeriod bilden.
Diese Funktion erfordert Julia 1.7 oder höher.
Rounding Functions
Datum und DatumZeit Werte können auf eine bestimmte Auflösung (z. B. 1 Monat oder 15 Minuten) mit floor, ceil oder round gerundet werden.
Base.floor — Methodfloor(dt::TimeType, p::Period) -> TimeTypeGibt das nächstgelegene Date oder DateTime zurück, das kleiner oder gleich dt mit der Auflösung p ist.
Zur Vereinfachung kann p ein Typ anstelle eines Wertes sein: floor(dt, Dates.Hour) ist eine Abkürzung für 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) -> TimeTypeGibt das nächstgelegene Date oder DateTime zurück, das größer oder gleich dt mit der Auflösung p ist.
Zur Vereinfachung kann p ein Typ anstelle eines Wertes sein: ceil(dt, Dates.Hour) ist eine Abkürzung für 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]) -> TimeTypeGibt das Date oder DateTime zurück, das dt am nächsten liegt, mit der Auflösung p. Standardmäßig (RoundNearestTiesUp) werden bei Gleichständen (z. B. das Runden von 9:30 auf die nächste Stunde) die Werte nach oben gerundet.
Zur Vereinfachung kann p auch ein Typ anstelle eines Wertes sein: round(dt, Dates.Hour) ist eine Abkürzung für 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:00Gültige Rundungsmodi für round(::TimeType, ::Period, ::RoundingMode) sind RoundNearestTiesUp (Standard), RoundDown (floor) und RoundUp (ceil).
Die meisten Period-Werte können auch auf eine bestimmte Auflösung gerundet werden:
Base.floor — Methodfloor(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> TRunde x auf das nächste Vielfache von precision ab. Wenn x und precision unterschiedliche Subtypen von Period sind, hat der Rückgabewert denselben Typ wie precision.
Zur Vereinfachung kann precision ein Typ anstelle eines Wertes sein: floor(x, Dates.Hour) ist eine Abkürzung für floor(x, Dates.Hour(1)).
julia> floor(Day(16), Week)
2 Wochen
julia> floor(Minute(44), Minute(15))
30 Minuten
julia> floor(Hour(36), Day)
1 TagDas Runden auf eine precision von Monat oder Jahr wird nicht unterstützt, da diese Periods von inkonsistenter Länge sind. ```
Base.ceil — Methodceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> TRunde x auf das nächste Vielfache von precision auf. Wenn x und precision unterschiedliche Subtypen von Period sind, hat der Rückgabewert denselben Typ wie precision.
Zur Vereinfachung kann precision ein Typ anstelle eines Wertes sein: ceil(x, Dates.Hour) ist eine Abkürzung für ceil(x, Dates.Hour(1)).
julia> ceil(Day(16), Week)
3 Wochen
julia> ceil(Minute(44), Minute(15))
45 Minuten
julia> ceil(Hour(36), Day)
2 TageDas Runden auf eine precision von Monats oder Jahrs wird nicht unterstützt, da diese Periods von inkonsistenter Länge sind. ```
Base.round — Methodround(x::Period, precision::T, [r::RoundingMode]) where T <: Union{TimePeriod, Week, Day} -> TRunde x auf das nächste Vielfache von precision. Wenn x und precision unterschiedliche Subtypen von Period sind, hat der Rückgabewert denselben Typ wie precision. Standardmäßig (RoundNearestTiesUp) werden bei Gleichständen (z. B. das Runden von 90 Minuten auf die nächste Stunde) die Werte aufgerundet.
Zur Vereinfachung kann precision auch ein Typ anstelle eines Wertes sein: round(x, Dates.Hour) ist eine Abkürzung für 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 daysGültige Rundungsmodi für round(::Period, ::T, ::RoundingMode) sind RoundNearestTiesUp (Standard), RoundDown (floor) und RoundUp (ceil).
Das Runden auf eine precision von Months oder Years wird nicht unterstützt, da diese Periods inkonsistente Längen haben.
Die folgenden Funktionen werden nicht exportiert:
Dates.floorceil — Functionfloorceil(dt::TimeType, p::Period) -> (TimeType, TimeType)Gibt gleichzeitig den floor und ceil eines Date oder DateTime mit der Auflösung p zurück. Effizienter als die einzelnen Aufrufe von floor und ceil.
floorceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> (T, T)Gibt gleichzeitig den floor und ceil von Period mit der Auflösung p zurück. Effizienter als die einzelnen Aufrufe von floor und ceil.
Dates.epochdays2date — Functionepochdays2date(tage) -> DatumNehmen Sie die Anzahl der Tage seit dem Rundungs-Epoch (0000-01-01T00:00:00) und geben Sie das entsprechende Datum zurück.
Dates.epochms2datetime — Functionepochms2datetime(milliseconds) -> DateTimeNehmen Sie die Anzahl der Millisekunden seit der Rundungs-Epoche (0000-01-01T00:00:00) und geben Sie das entsprechende DateTime zurück.
Dates.date2epochdays — Functiondate2epochdays(dt::Date) -> Int64Nehmen Sie das gegebene Date und geben Sie die Anzahl der Tage seit der Rundungs-Epoche (0000-01-01T00:00:00) als Int64 zurück.
Dates.datetime2epochms — Functiondatetime2epochms(dt::DateTime) -> Int64Nehmen Sie das gegebene DateTime und geben Sie die Anzahl der Millisekunden seit der Rundungs-Epoche (0000-01-01T00:00:00) als Int64 zurück.
Conversion Functions
Dates.today — Functiontoday() -> DatumGibt den Datumsanteil von now() zurück.
Dates.unix2datetime — Functionunix2datetime(x) -> DateTimeNehmen Sie die Anzahl der Sekunden seit dem Unix-Epochenbeginn 1970-01-01T00:00:00 und konvertieren Sie sie in das entsprechende DateTime.
Dates.datetime2unix — Functiondatetime2unix(dt::DateTime) -> Float64Nehmen Sie das gegebene DateTime und geben Sie die Anzahl der Sekunden seit der Unix-Epoche 1970-01-01T00:00:00 als Float64 zurück.
Dates.julian2datetime — Functionjulian2datetime(julian_days) -> DateTimeNehmen Sie die Anzahl der Julianischen Kalendertage seit der Epoche -4713-11-24T12:00:00 und geben Sie das entsprechende DateTime zurück.
Dates.datetime2julian — Functiondatetime2julian(dt::DateTime) -> Float64Nehmen Sie das gegebene DateTime und geben Sie die Anzahl der Julianischen Kalendertage seit dem julianischen Epoch -4713-11-24T12:00:00 als Float64 zurück.
Dates.rata2datetime — Functionrata2datetime(days) -> DateTimeNehmen Sie die Anzahl der Rata Die Tage seit der Epoche 0000-12-31T00:00:00 und geben Sie das entsprechende DateTime zurück.
Dates.datetime2rata — Functiondatetime2rata(dt::TimeType) -> Int64Gibt die Anzahl der Rata Die Tage seit der Epoche von dem gegebenen Date oder DateTime zurück.
Constants
Wochentage:
| 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 |
Monate des Jahres:
| 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.ISODateTimeFormatBeschreibt das ISO8601-Format für ein Datum und eine Uhrzeit. Dies ist der Standardwert für Dates.format eines DateTime.
Beispiele
julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), ISODateTimeFormat)
"2018-08-08T12:00:43.001"Dates.ISODateFormat — ConstantDates.ISODateFormatBeschreibt das ISO8601-Format für ein Datum. Dies ist der Standardwert für Dates.format eines Date.
Beispiele
julia> Dates.format(Date(2018, 8, 8), ISODateFormat)
"2018-08-08"Dates.ISOTimeFormat — ConstantDates.ISOTimeFormatBeschreibt das ISO8601-Format für eine Zeit. Dies ist der Standardwert für Dates.format eines Time.
Beispiele
julia> Dates.format(Time(12, 0, 43, 1), ISOTimeFormat)
"12:00:43.001"Dates.RFC1123Format — ConstantDates.RFC1123FormatBeschreibt das RFC1123-Format für ein Datum und eine Uhrzeit.
Beispiele
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.