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> import Dates

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

julia> Dates.Date("Sun, 27 Sep 2022", "e, d u y")
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

julia> theday = Dates.Date(2022,5,6) # Ein Datumsobjekt erstellen
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

julia> day1 = Dates.Date(2022,1,17)
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

julia> rightnow = Dates.now()
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

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

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

julia> weekdaysfromrange = filter(dy -> Dates.dayname(dy) != "Saturday" && Dates.dayname(dy) != "Sunday" , date_range)
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

julia> Dates.now()
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

julia> theday = Dates.Date(2022,5,6)
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

# Einen Datumsbereich erstellen
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

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

julia> time()
1.652232489777e9

Die Funktion unix2datetime() konvertiert Unix-Zeit in ein Datums-/Zeitobjekt:

Beispiel

julia> Dates.unix2datetime(time())
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

julia> moment=Dates.now()
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

julia> function foo(n)
         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

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.Jahr(2013))
2013-07-01
Andere Erweiterungen