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-01

Date 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")
       end

Oder 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-02

Alternativ können Sie Broadcasting verwenden:

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

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

Zur 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.

Julia 1.9

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 milliseconds

Accessor 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)
31

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

julia> Dates.Year(t)
2014 years

julia> Dates.Day(t)
31 days

Kombinationsmethoden 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)
735264

Query 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
5

Monat des Jahres:

julia> Dates.monthname(t)
"January"

julia> Dates.daysinmonth(t)
31

Ebenso 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)
31

Die 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-01

Was 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-01

Tricky? 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-29

Adjuster 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-30

Die 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-15

Dies 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-27

Die 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-11

Zusä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))
10

Die 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 minutes

Rounding

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:00

Im 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:00

Das 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:00

Das 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:00

Warum 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.PeriodType
Periode
Jahr
Quartal
Monat
Woche
Tag
Stunde
Minute
Sekunde
Millisekunde
Mikrosekunde
Nanosekunde

Period-Typen repräsentieren diskrete, menschliche Darstellungen von Zeit.

source
Dates.CompoundPeriodType
CompoundPeriod

Ein 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.

source
Dates.InstantType
Instant

Instant-Typen repräsentieren ganzzahlige, maschinelle Darstellungen von Zeit als kontinuierliche Zeitlinien, die von einem Epoch beginnen.

source
Dates.UTInstantType
UTInstant{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.

source
Dates.TimeTypeType
TimeType

TimeType-Typen umhüllen Instant-Maschineninstanzen, um menschliche Darstellungen des Maschineninstants bereitzustellen. Time, DateTime und Date sind Subtypen von TimeType.

source
Dates.DateTimeType
DateTime

DateTime 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.901
source
Dates.DateType
Datum

Datum umschließt ein UTInstant{Tag} und interpretiert es gemäß dem proleptischen Gregorianischen Kalender.

source
Dates.TimeType
Zeit

Zeit umschließt eine Nanosekunde und repräsentiert einen bestimmten Moment in einem 24-Stunden-Tag.

source
Dates.TimeZoneType
Zeitzone

Geografische 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.

source
Dates.UTCType
UTC

UTC, 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.

source

Dates Functions

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

Konstruiere einen DateTime-Typ aus Teilen. Die Argumente müssen in Int64 umwandelbar sein.

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

Konstruiere 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).

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

Erstellen 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:
[...]
source
Dates.DateTimeMethod
DateTime(dt::Date) -> DateTime

Konvertiert ein Date in ein DateTime. Die Stunden-, Minuten-, Sekunden- und Millisekundenanteile des neuen DateTime werden als null angenommen.

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

Konstruiere 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:00
source
Dates.formatMethod
format(dt::TimeType, format::AbstractString; locale="deutsch") -> AbstractString

Konstruiere 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:

CodeBeispieleKommentar
y6Numerisches Jahr mit fester Breite
Y1996Numerisches Jahr mit minimaler Breite
m1, 12Numerischer Monat mit minimaler Breite
uJanMonatsname auf 3 Zeichen verkürzt gemäß dem locale
UJanuarVollständiger Monatsname gemäß dem locale-Schlüssel
d1, 31Tag des Monats mit minimaler Breite
H0, 23Stunde (24-Stunden-Format) mit minimaler Breite
M0, 59Minute mit minimaler Breite
S0, 59Sekunde mit minimaler Breite
s000, 500Millisekunde mit einer minimalen Breite von 3
eMo, DiAbgekürzte Wochentage
EMontagVollstä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.

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

Konstruiere 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:

CodeEntsprichtKommentar
Y1996, 96Gibt das Jahr 1996, 0096 zurück
y1996, 96Dasselbe wie Y bei parse, verwirft jedoch überschüssige Ziffern bei format
m1, 01Entspricht 1- oder 2-stelligen Monaten
uJanEntspricht abgekürzten Monaten gemäß dem locale-Schlüsselwort
UJanuarEntspricht vollständigen Monatsnamen gemäß dem locale-Schlüsselwort
d1, 01Entspricht 1- oder 2-stelligen Tagen
H00Entspricht Stunden (24-Stunden-Format)
I00Zum Ausgeben von Stunden im 12-Stunden-Format
M00Entspricht Minuten
S00Entspricht Sekunden
s.500Entspricht Millisekunden
eMo, DiEntspricht abgekürzten Wochentagen
EMontagEntspricht vollständigen Wochentagen
pAMEntspricht AM/PM (nicht groß-/kleinschreibungssensitiv)
yyyymmdd19960101Entspricht 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.

source
Dates.@dateformat_strMacro
dateformat"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.

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

Konstruiere 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.

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

Konstruiere einen Date-Typ aus Teilen. Die Argumente müssen in Int64 umwandelbar sein.

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

Konstruiere 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).

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

Erstellen 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:
[...]
source
Dates.DateMethod
Date(dt::DateTime) -> Date

Konvertiert 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.

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

Konstruiere 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-02
source
Dates.DateMethod
Date(d::AbstractString, df::DateFormat=ISODateFormat) -> Date

Konstruiere 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.

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

Konstruiere einen Time-Typ aus Teilen. Die Argumente müssen in Int64 umwandelbar sein.

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

Konstruiere 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).

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

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:
[...]
source
Dates.TimeMethod
Time(dt::DateTime) -> Time

Konvertiert 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.

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

Konstruiere 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:00
source
Dates.TimeMethod
Time(t::AbstractString, df::DateFormat=ISOTimeFormat) -> Time

Konstruiere 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.

source
Dates.nowMethod
now() -> DateTime

Gibt ein DateTime zurück, das der Systemzeit des Benutzers einschließlich der Zeitzonenlokalisierung des Systems entspricht.

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

Gibt 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.864
source
Base.epsMethod
eps(::Type{DateTime}) -> Millisekunde
eps(::Type{Date}) -> Tag
eps(::Type{Time}) -> Nanosekunde
eps(::TimeType) -> Zeitraum

Gibt 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 Nanosekunde
source

Accessor Functions

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

Gibt 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))
53
source
Dates.dayFunction
day(dt::TimeType) -> Int64

Der Tag des Monats eines Date oder DateTime als Int64.

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

Die Stunde des Tages eines DateTime als Int64.

source
hour(t::Time) -> Int64

Die Stunde eines Time als Int64.

source
Dates.YearMethod
Year(v)

Konstruiere ein Year-Objekt mit dem gegebenen v-Wert. Die Eingabe muss verlustfrei in ein Int64 umwandelbar sein.

source
Dates.MonthMethod
Month(v)

Konstruiere ein Month-Objekt mit dem gegebenen v-Wert. Die Eingabe muss verlustfrei in ein Int64 umwandelbar sein.

source
Dates.WeekMethod
Week(v)

Konstruiere ein Week-Objekt mit dem gegebenen v-Wert. Die Eingabe muss verlustfrei in ein Int64 umwandelbar sein.

source
Dates.DayMethod
Day(v)

Konstruiere ein Day-Objekt mit dem gegebenen v-Wert. Die Eingabe muss verlustfrei in ein Int64 umwandelbar sein.

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

Der Stundenanteil eines DateTime als Stunde.

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

Der Minutenanteil eines DateTime als Minute.

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

Der zweite Teil eines DateTime als Second.

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

Der Millisekundenanteil eines DateTime als Millisekunde.

source
Dates.MicrosecondMethod
Microsecond(dt::Time) -> Mikrosekunde

Der Mikrosekundenanteil einer Zeit als Mikrosekunde.

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

Der Nanosekundenanteil einer Zeit als Nanosecond.

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

Gibt gleichzeitig die Jahr- und Monatsanteile eines Date oder DateTime zurück.

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

Gibt gleichzeitig die Monats- und Tagesanteile eines Date oder DateTime zurück.

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

Gibt gleichzeitig die Jahr-, Monat- und Tagesteile eines Date oder DateTime zurück.

source

Query Functions

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

Gibt 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"
source
Dates.dayabbrFunction
dayabbr(dt::TimeType; locale="deutsch") -> String
dayabbr(day::Integer; locale="deutsch") -> String

Gibt 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"
source
Dates.dayofweekFunction
dayofweek(dt::TimeType) -> Int64

Gibt den Wochentag als Int64 zurück, wobei 1 = Montag, 2 = Dienstag, usw..

Beispiele

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

Fü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"))
3
source
Dates.daysofweekinmonthFunction
daysofweekinmonth(dt::TimeType) -> Int

Fü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"))
4
source
Dates.monthnameFunction
monthname(dt::TimeType; locale="deutsch") -> String
monthname(month::Integer, locale="deutsch") -> String

Gibt 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"
source
Dates.monthabbrFunction
monthabbr(dt::TimeType; locale="deutsch") -> String
monthabbr(month::Integer, locale="deutsch") -> String

Gibt 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"
source
Dates.daysinmonthFunction
daysinmonth(dt::TimeType) -> Int

Gibt 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"))
29
source
Dates.isleapyearFunction
isleapyear(dt::TimeType) -> Bool

Gibt true zurück, wenn das Jahr von dt ein Schaltjahr ist.

Beispiele

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

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

Gibt den Tag des Jahres für dt zurück, wobei der 1. Januar Tag 1 ist.

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

Gibt 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)
366
source
Dates.quarterofyearFunction
quarterofyear(dt::TimeType) -> Int

Gibt das Quartal zurück, in dem sich dt befindet. Der Wertebereich ist 1:4.

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

Gibt den Tag des aktuellen Quartals von dt zurück. Der Wertebereich ist 1:92.

source

Adjuster Functions

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

Trunkiert den Wert von dt gemäß dem angegebenen Period-Typ.

Beispiele

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

Passt dt auf den Montag seiner Woche an.

Beispiele

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

Passt dt auf den Sonntag seiner Woche an.

Beispiele

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

Passt dt auf den ersten Tag seines Monats an.

Beispiele

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

Passt dt auf den letzten Tag seines Monats an.

Beispiele

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

Passt dt auf den ersten Tag seines Jahres an.

Beispiele

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

Passt dt auf den letzten Tag seines Jahres an.

Beispiele

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

Passt 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:00
source
Dates.lastdayofquarterFunction
lastdayofquarter(dt::TimeType) -> TimeType

Passt 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:00
source
Dates.tonextMethod
tonext(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

Passt 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.

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

Passt 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.

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

Passt dt auf den ersten dow seines Monats an. Alternativ wird of=Year auf den ersten dow des Jahres angepasst.

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

Passt dt auf den letzten dow seines Monats an. Alternativ wird of=Jahr auf den letzten dow des Jahres angepasst.

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

Passt 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.

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

Passt 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.

source

Periods

Dates.PeriodMethod
Jahr(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.

source
Dates.CompoundPeriodMethod
CompoundPeriod(periods) -> CompoundPeriod

Konstruiere 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 Minuten
source
Dates.canonicalizeFunction
canonicalize(::CompoundPeriod) -> CompoundPeriod

Reduziert die CompoundPeriod in ihre kanonische Form, indem die folgenden Regeln angewendet werden:

  • Jede Period, die groß genug ist, um teilweise durch eine gröbere Period dargestellt zu werden, wird in mehrere Periods zerlegt (z. B. wird Hour(30) zu Day(1) + Hour(6))
  • Periods mit entgegengesetzten Vorzeichen werden, wenn möglich, kombiniert (z. B. wird Hour(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 Minuten
source
Dates.valueFunction
Dates.value(x::Period) -> Int64

Fü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.

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

Geben 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.

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

Gibt den Vector von Periods zurück, die den gegebenen CompoundPeriod bilden.

Julia 1.7

Diese Funktion erfordert Julia 1.7 oder höher.

source

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.floorMethod
floor(dt::TimeType, p::Period) -> TimeType

Gibt 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:00
source
Base.ceilMethod
ceil(dt::TimeType, p::Period) -> TimeType

Gibt 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:00
source
Base.roundMethod
round(dt::TimeType, p::Period, [r::RoundingMode]) -> TimeType

Gibt 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:00

Gültige Rundungsmodi für round(::TimeType, ::Period, ::RoundingMode) sind RoundNearestTiesUp (Standard), RoundDown (floor) und RoundUp (ceil).

source

Die meisten Period-Werte können auch auf eine bestimmte Auflösung gerundet werden:

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

Runde 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 Tag

Das Runden auf eine precision von Monat oder Jahr wird nicht unterstützt, da diese Periods von inkonsistenter Länge sind. ```

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

Runde 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 Tage

Das Runden auf eine precision von Monats oder Jahrs wird nicht unterstützt, da diese Periods von inkonsistenter Länge sind. ```

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

Runde 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 days

Gü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.

source

Die folgenden Funktionen werden nicht exportiert:

Dates.floorceilFunction
floorceil(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.

source
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.

source
Dates.epochdays2dateFunction
epochdays2date(tage) -> Datum

Nehmen Sie die Anzahl der Tage seit dem Rundungs-Epoch (0000-01-01T00:00:00) und geben Sie das entsprechende Datum zurück.

source
Dates.epochms2datetimeFunction
epochms2datetime(milliseconds) -> DateTime

Nehmen Sie die Anzahl der Millisekunden seit der Rundungs-Epoche (0000-01-01T00:00:00) und geben Sie das entsprechende DateTime zurück.

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

Nehmen Sie das gegebene Date und geben Sie die Anzahl der Tage seit der Rundungs-Epoche (0000-01-01T00:00:00) als Int64 zurück.

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

Nehmen Sie das gegebene DateTime und geben Sie die Anzahl der Millisekunden seit der Rundungs-Epoche (0000-01-01T00:00:00) als Int64 zurück.

source

Conversion Functions

Dates.todayFunction
today() -> Datum

Gibt den Datumsanteil von now() zurück.

source
Dates.unix2datetimeFunction
unix2datetime(x) -> DateTime

Nehmen Sie die Anzahl der Sekunden seit dem Unix-Epochenbeginn 1970-01-01T00:00:00 und konvertieren Sie sie in das entsprechende DateTime.

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

Nehmen Sie das gegebene DateTime und geben Sie die Anzahl der Sekunden seit der Unix-Epoche 1970-01-01T00:00:00 als Float64 zurück.

source
Dates.julian2datetimeFunction
julian2datetime(julian_days) -> DateTime

Nehmen Sie die Anzahl der Julianischen Kalendertage seit der Epoche -4713-11-24T12:00:00 und geben Sie das entsprechende DateTime zurück.

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

Nehmen 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.

source
Dates.rata2datetimeFunction
rata2datetime(days) -> DateTime

Nehmen Sie die Anzahl der Rata Die Tage seit der Epoche 0000-12-31T00:00:00 und geben Sie das entsprechende DateTime zurück.

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

Gibt die Anzahl der Rata Die Tage seit der Epoche von dem gegebenen Date oder DateTime zurück.

source

Constants

Wochentage:

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

Monate des Jahres:

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

Common Date Formatters

Dates.ISODateTimeFormatConstant
Dates.ISODateTimeFormat

Beschreibt 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"
source
Dates.ISODateFormatConstant
Dates.ISODateFormat

Beschreibt 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"
source
Dates.ISOTimeFormatConstant
Dates.ISOTimeFormat

Beschreibt 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"
source
Dates.RFC1123FormatConstant
Dates.RFC1123Format

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