Datum und Uhrzeit in Julia
Julia stellt die folgenden drei Funktionen zur Verfügung, um Datums- und Zeitangaben über das Modul Dates zu verarbeiten:
- Date: Gibt ein Datum an, tagesgenau, und zeigt nur das Datum an.
- DateTime: Gibt Datum und Uhrzeit an, millisekundengenau.
- DateTime: Gibt die Tageszeit an, nanosekundengenau, und repräsentiert einen bestimmten Moment innerhalb der 24 Stunden eines Tages.
Bevor wir es verwenden, müssen wir zuerst das Modul Dates importieren:
import Dates
Date- und DateTime-Typen können aus Ganzzahlen oder Period-Typen geparst werden.
Period basiert auf Datumswerten und repräsentiert Jahre, Monate, Tage usw.:
Period Year Quarter Month Week Day Hour Minute Second Millisecond Microsecond Nanosecond
Sowohl Date als auch DateTime sind Untertypen des abstrakten Typs TimeType.
Das folgende Diagramm zeigt die Beziehung zwischen Datumstypen; klicken Sie auf das Bild, um es zu vergrößern:
Datum und Uhrzeit ausgeben:Beispiel
julia> rightnow = Dates.Time(Dates.now()) # Time
08:41:15.917
julia> theday = Dates.Date(2022,5,6) # Date
2022-05-06
julia> today_date = Dates.today()
2022-05-11
julia> Dates.now(Dates.UTC)
2022-05-11T00:44:20.136
# Zeit formatieren
julia> Dates.DateTime("20220429 120000", "yyyymmdd HHMMSS")
2022-04-29T12:00:00
julia> Dates.DateTime("19/04/2022 17:42", "dd/mm/yyyy HH:MM")
2022-04-19T17:42:00
Die folgende Tabelle gibt Datumsformatcodes an, mit denen wir unsere Datumsangaben formatieren können:
| Zeichen | Datums-/Zeit-Element |
|---|---|
| Y | Stellt das Jahr dar, z. B.: yyyy => 1984, yy => 84 |
| m | Stellt den Monat dar, z. B.: m => 7 oder 07 |
| u | Stellt den abgekürzten Monatsnamen dar, z. B.: Jun |
| U | Stellt den vollständigen Monatsnamen dar, z. B.: Januar |
| e | Stellt den abgekürzten Wochentag dar, z. B.: Mo |
| E | Stellt den vollständigen Wochentag dar, z. B.: Montag |
| d | Stellt den Tag dar, z. B.: 1 oder 01 |
| H | Stellt die Stunde dar, z. B.: HH => 00 |
| M | Stellt die Minute dar, z. B.: MM => 00 |
| S | Stellt die Sekunde dar, z. B.: S => 00 |
| s | Stellt die Millisekunde dar, z. B.: .000 |
Beispiel
2022-09-27
julia> Dates.DateTime("Sun, 27 Sep 2022 10:25:10", "e, d u y H:M:S")
2022-09-27T10:25:10
Anhand der obigen Beispiele haben wir einige Datums-/Zeitobjekte erstellt. Als Nächstes können wir diese Objekte verwenden, um Daten zu erhalten (einschließlich Jahr, Monat, Tag, Minute, Sekunde, Stunde usw.):
Beispiel
2022-05-06
# Als Nächstes die Daten in theday abrufen
julia> Dates.year(theday)
2022
julia> Dates.month(theday)
5
# Die aktuellen Zeitdaten abrufen
julia> rightnow = Dates.now()
2022-05-11T08:51:45.342
julia> Dates.minute(rightnow)
51
julia> Dates.hour(rightnow)
8
julia> Dates.second(rightnow)
45
# Monat und Wochentag abrufen
julia> Dates.dayofweek(theday)
5
julia> Dates.dayname(theday)
"Friday"
julia> Dates.yearmonthday(theday)
(2022, 5, 6)
julia> Dates.dayofweekofmonth(theday)
1
Datumsarithmetik
Wir können arithmetische Operationen mit Datumsobjekten durchführen.
Zum Beispiel berechnen wir die Anzahl der Tage zwischen zwei Daten:
Beispiel
2022-01-17
julia> day2 = Dates.Date(2022,3,23)
2022-03-23
julia> day2 - day1
65 Tage
# Unterschiedliche Zeiteinheiten verwenden
julia> Dates.canonicalize(Dates.CompoundPeriod(day2 - day1))
9 Wochen, 2 Tage
Wir können auch zu Datumsangaben addieren, zum Beispiel das Datum nach 2 Jahren und 6 Monaten berechnen:
Beispiel
2022-05-11T09:01:07.946
julia> rightnow + Dates.Year(20) + Dates.Month(6)
2042-11-11T09:01:07.946
# Datum nach 6 Tagen
julia> rightnow + Dates.Day(6)
2022-05-17T09:01:07.946
Datumsbereiche
Julia kann Datumsangaben für ein bestimmtes Intervall mithilfe iterierbarer Bereichsobjekte erstellen. Im folgenden Beispiel erstellen wir einen Iterator, der den ersten Tag jedes Monats generiert.
Beispiel
Dates.Date("2011-01-01"):Dates.Month(1):Dates.Date("2022-01-01")
Im obigen Range-Objekt können wir herausfinden, welche davon Wochentage sind. Hier müssen wir eine anonyme Funktion für filter() erstellen, die anhand des gegebenen Datums bestimmt, ob es ein Wochentag ist:
Beispiel
94-element Vector{Dates.Date}:
2011-02-01
2011-03-01
2011-04-01
2011-06-01
2011-07-01
2011-08-01
2011-09-01
2011-11-01
2011-12-01
2012-02-01
⋮
2021-02-01
2021-03-01
2021-04-01
2021-06-01
2021-07-01
2021-09-01
2021-10-01
2021-11-01
2021-12-01
Runden von Datums- und Zeitangaben
Wir verwenden oft die Funktionen round(), floor() und ceil(), um Parameter auf- oder abzurunden. Ähnlich können diese Funktionen auch zum Runden von Datumsangaben verwendet werden, um Datumsangaben zeitlich vor- oder zurückzuverschieben.
Beispiel
2022-05-11T09:17:49.824
julia> Dates.format(round(Dates.DateTime(Dates.now()), Dates.Minute(15)), Dates.RFC1123Format)
"Wed, 11 May 2022 09:15:00"
ceil()Die Funktion verschiebt das Datum/die Uhrzeit nach vorn, wie unten dargestellt:
Beispiel
2022-05-06
# Nächster Monat
julia> ceil(theday, Dates.Month)
2022-06-01
# Nächstes Jahr
julia> ceil(theday, Dates.Year)
2023-01-01
# Nächste Woche
julia> ceil(theday, Dates.Week)
2022-05-09
Wiederkehrende Datumsangaben
Wir können wiederkehrende Datumsangaben innerhalb eines Bereichs finden, zum Beispiel jeden Sonntag:
Beispiel
julia> date_range = Dates.Date(2011,1,1):Dates.Month(1):Dates.Date(2022,1,1)
Dates.Date("2011-01-01"):Dates.Month(1):Dates.Date("2022-01-01")
# Die Funktion filter() verwenden, um jeden Sonntag herauszufiltern
julia> filter(d -> Dates.dayname(d) == "Sunday", date_range)
20-element Vector{Dates.Date}:
2011-05-01
2012-01-01
2012-04-01
2012-07-01
2013-09-01
2013-12-01
2014-06-01
2015-02-01
2015-03-01
2015-11-01
2016-05-01
2017-01-01
2017-10-01
2018-04-01
2018-07-01
2019-09-01
2019-12-01
2020-03-01
2020-11-01
2021-08-01
UNIX-Zeit, oder POSIX-Zeit, ist eine Zeitdarstellung, die von UNIX- oder UNIX-ähnlichen Systemen verwendet wird: die Gesamtzahl der Sekunden von 0:00:00 am 1. Januar 1970 UTC bis zur Gegenwart, wobei Schaltsekunden ignoriert werden.
Die Funktion time() gibt den Unix-Wert zurück:
Beispiel
1.652232489777e9
Die Funktion unix2datetime() konvertiert Unix-Zeit in ein Datums-/Zeitobjekt:
Beispiel
2022-05-11T01:28:23.493
Aktuelle Zeit
DateTimes werden in Millisekunden gemessen; wir können die Funktion Dates.value verwenden, um die Zeit in Millisekunden zu erhalten:
Beispiel
2022-05-11T09:31:31.037
julia> Dates.value(moment)
63787944691037
julia> moment.instant
Dates.UTInstant{Millisecond}(Millisecond(63787944691037))
Zeit und Überwachung
Julia stellt uns das@elapsedMakro zur Verfügung, das die Zeit (in Sekunden) zurückgibt, die zum Ausführen eines Ausdrucks benötigt wird.
Berechnen Sie die Zeit, die zum Ausführen des folgenden Codes benötigt wird:
Beispiel
for i in 1:n
x = sin(rand())
end
end
foo (generische Funktion mit 1 Methode)
julia> @elapsed foo(100000000)
1.360567967
julia> @time foo(100000000)
1.363258 seconds
Weitere Beispiele
Beispiel
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.Jahr(2013))
2013-07-01
