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 DateFormat
s 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.
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 TimeType
4d61726b646f776e2e436f64652822222c2022726f756e642229_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.Period
— TypePeriode
Jahr
Quartal
Monat
Woche
Tag
Stunde
Minute
Sekunde
Millisekunde
Mikrosekunde
Nanosekunde
Period
-Typen repräsentieren diskrete, menschliche Darstellungen von Zeit.
Dates.CompoundPeriod
— TypeCompoundPeriod
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.
Dates.Instant
— TypeInstant
Instant
-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
— TypeTimeType
TimeType
-Typen umhüllen Instant
-Maschineninstanzen, um menschliche Darstellungen des Maschineninstants bereitzustellen. Time
, DateTime
und Date
sind Subtypen von TimeType
.
Dates.DateTime
— TypeDateTime
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
Dates.Date
— TypeDatum
Datum
umschließt ein UTInstant{Tag}
und interpretiert es gemäß dem proleptischen Gregorianischen Kalender.
Dates.Time
— TypeZeit
Zeit
umschließt eine Nanosekunde
und repräsentiert einen bestimmten Moment in einem 24-Stunden-Tag.
Dates.TimeZone
— TypeZeitzone
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.
Dates.UTC
— TypeUTC
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.
Dates Functions
Dates.DateTime
— MethodDateTime(y, [m, d, h, mi, s, ms]) -> DateTime
Konstruiere einen DateTime
-Typ aus Teilen. Die Argumente müssen in Int64
umwandelbar sein.
Dates.DateTime
— MethodDateTime(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)
.
Dates.DateTime
— MethodDateTime(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:
[...]
Dates.DateTime
— MethodDateTime(dt::Date) -> DateTime
Konvertiert 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") -> 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
Dates.format
— Methodformat(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:
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") -> 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:
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) -> 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.
Dates.Date
— MethodDate(y, [m, d]) -> Date
Konstruiere einen Date
-Typ aus Teilen. Die Argumente müssen in Int64
umwandelbar sein.
Dates.Date
— MethodDate(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)
.
Dates.Date
— MethodDate(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:
[...]
Dates.Date
— MethodDate(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.
Dates.Date
— MethodDate(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
Dates.Date
— MethodDate(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.
Dates.Time
— MethodTime(h, [mi, s, ms, us, ns]) -> Time
Konstruiere einen Time
-Typ aus Teilen. Die Argumente müssen in Int64
umwandelbar sein.
Dates.Time
— MethodTime(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)
.
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) -> 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.
Dates.Time
— MethodTime(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
Dates.Time
— MethodTime(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.
Dates.now
— Methodnow() -> DateTime
Gibt ein DateTime
zurück, das der Systemzeit des Benutzers einschließlich der Zeitzonenlokalisierung des Systems entspricht.
Dates.now
— Methodnow(::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
Base.eps
— Methodeps(::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
Accessor Functions
Dates.year
— Functionyear(dt::TimeType) -> Int64
Das Jahr eines Date
oder DateTime
als Int64
.
Dates.month
— Functionmonth(dt::TimeType) -> Int64
Der Monat eines Date
oder DateTime
als Int64
.
Dates.week
— Functionweek(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
Dates.day
— Functionday(dt::TimeType) -> Int64
Der Tag des Monats eines Date
oder DateTime
als Int64
.
Dates.hour
— Functionhour(dt::DateTime) -> Int64
Die Stunde des Tages eines DateTime
als Int64
.
hour(t::Time) -> Int64
Die Stunde eines Time
als Int64
.
Dates.minute
— Functionminute(dt::DateTime) -> Int64
Die Minute eines DateTime
als Int64
.
minute(t::Time) -> Int64
Die Minute eines Time
als Int64
.
Dates.second
— Functionsecond(dt::DateTime) -> Int64
Die Sekunde eines DateTime
als Int64
.
second(t::Time) -> Int64
Die Sekunde eines Time
als Int64
.
Dates.millisecond
— Functionmillisecond(dt::DateTime) -> Int64
Die Millisekunde eines DateTime
als Int64
.
millisecond(t::Time) -> Int64
Die Millisekunde eines Time
als ein Int64
.
Dates.microsecond
— Functionmikrosekunde(t::Zeit) -> Int64
Die Mikrosekunde einer Zeit
als Int64
.
Dates.nanosecond
— Functionnanosecond(t::Time) -> Int64
Die 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) -> Stunde
Der Stundenanteil eines DateTime als Stunde
.
Dates.Minute
— MethodMinute(dt::DateTime) -> Minute
Der Minutenanteil eines DateTime als Minute
.
Dates.Second
— MethodSecond(dt::DateTime) -> Second
Der zweite Teil eines DateTime als Second
.
Dates.Millisecond
— MethodMillisekunde(dt::DateTime) -> Millisekunde
Der Millisekundenanteil eines DateTime als Millisekunde
.
Dates.Microsecond
— MethodMicrosecond(dt::Time) -> Mikrosekunde
Der Mikrosekundenanteil einer Zeit als Mikrosekunde
.
Dates.Nanosecond
— MethodNanosecond(dt::Time) -> Nanosecond
Der 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") -> 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"
Dates.dayabbr
— Functiondayabbr(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"
Dates.dayofweek
— Functiondayofweek(dt::TimeType) -> Int64
Gibt den Wochentag als Int64
zurück, wobei 1 = Montag, 2 = Dienstag, usw.
.
Beispiele
julia> dayofweek(Date("2000-01-01"))
6
Dates.dayofmonth
— Functiondayofmonth(dt::TimeType) -> Int64
Der Tag des Monats eines Date
oder DateTime
als Int64
.
Dates.dayofweekofmonth
— Functiondayofweekofmonth(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
Dates.daysofweekinmonth
— Functiondaysofweekinmonth(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
Dates.monthname
— Functionmonthname(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"
Dates.monthabbr
— Functionmonthabbr(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"
Dates.daysinmonth
— Functiondaysinmonth(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
Dates.isleapyear
— Functionisleapyear(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
Dates.dayofyear
— Functiondayofyear(dt::TimeType) -> Int
Gibt den Tag des Jahres für dt
zurück, wobei der 1. Januar Tag 1 ist.
Dates.daysinyear
— Functiondaysinyear(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
Dates.quarterofyear
— Functionquarterofyear(dt::TimeType) -> Int
Gibt das Quartal zurück, in dem sich dt
befindet. Der Wertebereich ist 1:4.
Dates.dayofquarter
— Functiondayofquarter(dt::TimeType) -> Int
Gibt den Tag des aktuellen Quartals von dt
zurück. Der Wertebereich ist 1:92.
Adjuster Functions
Base.trunc
— Methodtrunc(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
Dates.firstdayofweek
— Functionfirstdayofweek(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
Dates.lastdayofweek
— Functionlastdayofweek(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
Dates.firstdayofmonth
— Functionfirstdayofmonth(dt::TimeType) -> TimeType
Passt dt
auf den ersten Tag seines Monats an.
Beispiele
julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00
Dates.lastdayofmonth
— Functionlastdayofmonth(dt::TimeType) -> TimeType
Passt dt
auf den letzten Tag seines Monats an.
Beispiele
julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00
Dates.firstdayofyear
— Functionfirstdayofyear(dt::TimeType) -> TimeType
Passt dt
auf den ersten Tag seines Jahres an.
Beispiele
julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00
Dates.lastdayofyear
— Functionlastdayofyear(dt::TimeType) -> TimeType
Passt dt
auf den letzten Tag seines Jahres an.
Beispiele
julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00
Dates.firstdayofquarter
— Functionfirstdayofquarter(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
Dates.lastdayofquarter
— Functionlastdayofquarter(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
Dates.tonext
— Methodtonext(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.
Dates.toprev
— Methodtoprev(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.
Dates.tofirst
— Functiontofirst(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.
Dates.tolast
— Functiontolast(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.
Dates.tonext
— Methodtonext(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.
Dates.toprev
— Methodtoprev(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.
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) -> CompoundPeriod
Konstruiere eine CompoundPeriod
aus einem Vector
von Period
s. Alle Period
s 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
Dates.canonicalize
— Functioncanonicalize(::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öberePeriod
dargestellt zu werden, wird in mehrerePeriod
s zerlegt (z. B. wirdHour(30)
zuDay(1) + Hour(6)
) Period
s 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 Minuten
Dates.value
— FunctionDates.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.
Dates.default
— Functiondefault(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.
Dates.periods
— FunctionDates.periods(::CompoundPeriod) -> Vector{Period}
Gibt den Vector
von Period
s 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) -> 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
Base.ceil
— Methodceil(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
Base.round
— Methodround(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
).
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} -> 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 Period
s von inkonsistenter Länge sind. ```
Base.ceil
— Methodceil(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 Monat
s oder Jahr
s wird nicht unterstützt, da diese Period
s von inkonsistenter Länge sind. ```
Base.round
— Methodround(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 Month
s oder Year
s wird nicht unterstützt, da diese Period
s 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) -> Datum
Nehmen 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) -> DateTime
Nehmen 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) -> 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.
Dates.datetime2epochms
— Functiondatetime2epochms(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.
Conversion Functions
Dates.today
— Functiontoday() -> Datum
Gibt den Datumsanteil von now()
zurück.
Dates.unix2datetime
— Functionunix2datetime(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
.
Dates.datetime2unix
— Functiondatetime2unix(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.
Dates.julian2datetime
— Functionjulian2datetime(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.
Dates.datetime2julian
— Functiondatetime2julian(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.
Dates.rata2datetime
— Functionrata2datetime(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.
Dates.datetime2rata
— Functiondatetime2rata(dt::TimeType) -> Int64
Gibt 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.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"
Dates.ISODateFormat
— ConstantDates.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"
Dates.ISOTimeFormat
— ConstantDates.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"
Dates.RFC1123Format
— ConstantDates.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"
- 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
andDateTime
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.