This PR introduces date and time functionality to the Lean 4 Std. Breaking Changes: - `Lean.Data.Rat` is now `Std.Internal.Rat` because it's used by the DateTime library. --------- Co-authored-by: Markus Himmel <markus@himmel-villmar.de> Co-authored-by: Mac Malone <tydeu@hatpress.net>
83 lines
2.6 KiB
Text
83 lines
2.6 KiB
Text
import Std.Time
|
|
import Init
|
|
open Std.Time
|
|
|
|
/-
|
|
Test for quantity
|
|
-/
|
|
|
|
#eval do
|
|
let res ← Database.defaultGetZoneRules "America/Sao_Paulo"
|
|
if res.transitions.size < 1 then
|
|
throw <| IO.userError "invalid quantity for America/Sao_Paulo"
|
|
|
|
/--
|
|
info: { second := 0 }
|
|
-/
|
|
#guard_msgs in
|
|
#eval do
|
|
let res ← Database.defaultGetZoneRules "UTC"
|
|
println! repr res.initialLocalTimeType.gmtOffset
|
|
|
|
/-
|
|
The idea is just to check if there's no errors while computing the local zone rules.
|
|
-/
|
|
#eval do
|
|
discard <| Database.defaultGetLocalZoneRules
|
|
|
|
/-
|
|
Java:
|
|
2013-10-19T23:59:59-03:00[America/Sao_Paulo] 1382237999
|
|
2013-10-20T01:00-02:00[America/Sao_Paulo] 1382238000
|
|
2013-10-20T01:00:01-02:00[America/Sao_Paulo] 1382238001
|
|
-/
|
|
|
|
/--
|
|
info: 2013-10-19T23:59:59.000000000-03:00
|
|
2013-10-20T00:00:00.000000000-02:00
|
|
2013-10-20T00:00:01.000000000-02:00
|
|
-/
|
|
#guard_msgs in
|
|
#eval do
|
|
let zr ← Database.defaultGetZoneRules "America/Sao_Paulo"
|
|
println! "{ZonedDateTime.ofPlainDateTime datetime("2013-10-19T23:59:59") zr |>.toLeanDateTimeWithZoneString}"
|
|
println! "{ZonedDateTime.ofPlainDateTime datetime("2013-10-20T00:00:00") zr |>.toLeanDateTimeWithZoneString}"
|
|
println! "{ZonedDateTime.ofPlainDateTime datetime("2013-10-20T00:00:01") zr |>.toLeanDateTimeWithZoneString}"
|
|
|
|
/-
|
|
Java:
|
|
2019-11-03T01:59:59-05:00[America/Chicago] 1572764399
|
|
2019-11-03T02:00-06:00[America/Chicago] 1572768000
|
|
2019-11-03T02:59:59-06:00[America/Chicago] 1572771599
|
|
-/
|
|
|
|
/--
|
|
info: 2019-11-03T01:59:59.000000000-05:00
|
|
2019-11-03T02:00:00.000000000-06:00
|
|
2019-11-03T02:59:59.000000000-06:00
|
|
-/
|
|
#guard_msgs in
|
|
#eval do
|
|
let zr ← Database.defaultGetZoneRules "America/Chicago"
|
|
println! "{ZonedDateTime.ofPlainDateTime datetime("2019-11-03T01:59:59") zr |>.toLeanDateTimeWithZoneString}"
|
|
println! "{ZonedDateTime.ofPlainDateTime datetime("2019-11-03T02:00:00") zr |>.toLeanDateTimeWithZoneString}"
|
|
println! "{ZonedDateTime.ofPlainDateTime datetime("2019-11-03T02:59:59") zr |>.toLeanDateTimeWithZoneString}"
|
|
|
|
/-
|
|
Java:
|
|
2003-10-26T01:59:59-05:00[America/Monterrey] 1067151599
|
|
2003-10-26T02:00-06:00[America/Monterrey] 1067155200
|
|
2003-10-26T02:59:59-06:00[America/Monterrey] 1067158799
|
|
-/
|
|
|
|
/--
|
|
info: 2003-10-26T01:59:59.000000000-05:00
|
|
2003-10-26T02:00:00.000000000-06:00
|
|
2003-10-26T02:59:59.000000000-06:00
|
|
-/
|
|
#guard_msgs in
|
|
#eval do
|
|
let zr ← Database.defaultGetZoneRules "America/Monterrey"
|
|
println! "{ZonedDateTime.ofPlainDateTime datetime("2003-10-26T01:59:59") zr |>.toLeanDateTimeWithZoneString}"
|
|
println! "{ZonedDateTime.ofPlainDateTime datetime("2003-10-26T02:00:00") zr |>.toLeanDateTimeWithZoneString}"
|
|
println! "{ZonedDateTime.ofPlainDateTime datetime("2003-10-26T02:59:59") zr |>.toLeanDateTimeWithZoneString}"
|