Le système de gestion des dates de Julia offre de nombreuses possibilités, mais ce n'est pas un modèle de simplicité.
Il y a Dates, Time, DateTime et TimeZones.
Le format ISO long est géré par la méthode ZonedDateTime de TimesZones.
Rappel, le format ISO long est : yyyy-mm-ddTHH:MM:SS.ssszz
using Dates, TimeZones now() |> println # DateTime ZonedDateTime(now(), tz"Europe/Brussels") |> println # TimeZones;
2021-01-25T20:14:44.588 2021-01-25T20:14:44.947+01:00
ZonedDateTime ne trouve aucun mal à abréger les microsecondes, ce qui donne .5 au lieu de .500 millisecondes et ne facilite pas la conversion en DateTime.
ZonedDateTime(DateTime(2021, 1, 8, 17, 55, 33, 500), tz"Asia/Shanghai") |> println
2021-01-08T17:55:33.5+08:00
DateTime peut convertir un ZonedDateTime sans soucis uniquement s'il est au format ISO long : yyyy-mm-ddTHH:MM:SS.sssZZ
t1 = "2021-01-08T17:55:33.5+01:00" # ZonedDateTime(DateTime(t1)) # produira un ArgumentError: Invalid DateTime string t2 = "2021-01-08T17:55:33+01:00" # ZonedDateTime(DateTime(t2)) # produira un ArgumentError: Invalid DateTime string # Pour réaliser la conversion il faut connaître le format réel ZonedDateTime(DateTime(t2, "yyyy-mm-ddTHH:MM:SSzz"), tz"Europe/Brussels") |> println ZonedDateTime(DateTime(t1, "yyyy-mm-ddTHH:MM:SS.szz"), tz"Europe/Brussels") |> println
2021-01-08T17:55:33+01:00 2021-01-08T17:55:33.5+01:00
Le comportement de ZonedDateTime est catastrophique lorsque vous sauvegarder les ZonedDateTime dans un fichier, car lorsque vous ouvrer ce fichier et essayer de traiter les dates sauvegardées le format de la date va poser le problème traiter ci-dessus pour chaque enregistrement de la date.
Recommendation : lorsque vous devez enregistrer des dates dans un fichier ce doit être dans le format DateTime ("yyyy-mm-ddTHH:MM:SS") ou sans microsecondes ("yyyy-mm-ddTHH:MM:SSzz") avec round() voir ci-dessous.
On peut convertir une date dans un autre fuseau horaire.
ny = "01/01/2021 06:31:33 PM" # heure de New-Yok dt_ny = DateTime(ny, "mm/dd/yyyy H:M:S p") zdt_ny = ZonedDateTime(dt_ny, tz"America/New_york") dt_ny |> println zdt_ny |> println astimezone(zdt_ny, tz"UTC") |> println astimezone(zdt_ny, tz"Europe/Brussels") |> println astimezone(zdt_ny, tz"Asia/Shanghai") |> println # Beijing Time
2021-01-01T18:31:33 2021-01-01T18:31:33-05:00 2021-01-01T23:31:33+00:00 2021-01-02T00:31:33+01:00 2021-01-02T07:31:33+08:00
Conversions et arithmétique
zdt_br = now(tz"Europe/Brussels") zdt_br |> println "\n" |> println Date(zdt_br) |> println Date(zdt_br, UTC) |> println "\n" |> println Time(zdt_br) |> println Time(zdt_br, UTC) |> println "\n" |> println zdt_br + Day(12) + Hour(5) |> println "\n" |> println round(zdt_br, Dates.Second) |> println # on dispose aussi de floor et ceil
2021-01-25T20:14:45.748+01:00 2021-01-25 2021-01-25 20:14:45.748 19:14:45.748 2021-02-07T01:14:45.748+01:00 2021-01-25T20:14:46+01:00
Ranges
tz_br = tz"Europe/Brussels" start = ZonedDateTime(2014, tz_br) stop = ZonedDateTime(2015, tz_br) br_dates = filter(start:Dates.Hour(1):stop) do d Dates.dayofweek(d) == Dates.Wednesday && Dates.hour(d) == 9 end length(br_dates) |> println br_dates |> println
53 [TimeZones.ZonedDateTime(2014, 1, 1, 9, tz"Europe/Brussels"), TimeZones.Zon edDateTime(2014, 1, 8, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(201 4, 1, 15, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 1, 22, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 1, 29, 9, tz"Europe/Bru ssels"), TimeZones.ZonedDateTime(2014, 2, 5, 9, tz"Europe/Brussels"), TimeZ ones.ZonedDateTime(2014, 2, 12, 9, tz"Europe/Brussels"), TimeZones.ZonedDat eTime(2014, 2, 19, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 2 , 26, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 3, 5, 9, tz"Eu rope/Brussels"), TimeZones.ZonedDateTime(2014, 3, 12, 9, tz"Europe/Brussels "), TimeZones.ZonedDateTime(2014, 3, 19, 9, tz"Europe/Brussels"), TimeZones .ZonedDateTime(2014, 3, 26, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTim e(2014, 4, 2, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 4, 9, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 4, 16, 9, tz"Europe/ Brussels"), TimeZones.ZonedDateTime(2014, 4, 23, 9, tz"Europe/Brussels"), T imeZones.ZonedDateTime(2014, 4, 30, 9, tz"Europe/Brussels"), TimeZones.Zone dDateTime(2014, 5, 7, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014 , 5, 14, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 5, 21, 9, t z"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 5, 28, 9, tz"Europe/Brus sels"), TimeZones.ZonedDateTime(2014, 6, 4, 9, tz"Europe/Brussels"), TimeZo nes.ZonedDateTime(2014, 6, 11, 9, tz"Europe/Brussels"), TimeZones.ZonedDate Time(2014, 6, 18, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 6, 25, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 7, 2, 9, tz"Eur ope/Brussels"), TimeZones.ZonedDateTime(2014, 7, 9, 9, tz"Europe/Brussels") , TimeZones.ZonedDateTime(2014, 7, 16, 9, tz"Europe/Brussels"), TimeZones.Z onedDateTime(2014, 7, 23, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime( 2014, 7, 30, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 8, 6, 9 , tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 8, 13, 9, tz"Europe/B russels"), TimeZones.ZonedDateTime(2014, 8, 20, 9, tz"Europe/Brussels"), Ti meZones.ZonedDateTime(2014, 8, 27, 9, tz"Europe/Brussels"), TimeZones.Zoned DateTime(2014, 9, 3, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 9, 10, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 9, 17, 9, tz "Europe/Brussels"), TimeZones.ZonedDateTime(2014, 9, 24, 9, tz"Europe/Bruss els"), TimeZones.ZonedDateTime(2014, 10, 1, 9, tz"Europe/Brussels"), TimeZo nes.ZonedDateTime(2014, 10, 8, 9, tz"Europe/Brussels"), TimeZones.ZonedDate Time(2014, 10, 15, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 1 0, 22, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 10, 29, 9, tz "Europe/Brussels"), TimeZones.ZonedDateTime(2014, 11, 5, 9, tz"Europe/Bruss els"), TimeZones.ZonedDateTime(2014, 11, 12, 9, tz"Europe/Brussels"), TimeZ ones.ZonedDateTime(2014, 11, 19, 9, tz"Europe/Brussels"), TimeZones.ZonedDa teTime(2014, 11, 26, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 12, 3, 9, tz"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 12, 10, 9, t z"Europe/Brussels"), TimeZones.ZonedDateTime(2014, 12, 17, 9, tz"Europe/Bru ssels"), TimeZones.ZonedDateTime(2014, 12, 24, 9, tz"Europe/Brussels"), Tim eZones.ZonedDateTime(2014, 12, 31, 9, tz"Europe/Brussels")]
Licence Creative Commons Attribution 2.0 Belgique