lean4-htt/tests/lean/run/timeIO.lean
Sofia Rodrigues e0d7c3ac79
feat: add date and time functionality (#4904)
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>
2024-11-14 14:04:19 +00:00

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