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>
319 lines
5 KiB
Text
319 lines
5 KiB
Text
import Std.Time
|
|
open Std.Time
|
|
|
|
def date := date("1970-01-20")
|
|
|
|
/--
|
|
info: date("1970-02-01")
|
|
-/
|
|
#guard_msgs in
|
|
#eval date.addDays 12
|
|
|
|
/--
|
|
info: date("1970-02-20")
|
|
-/
|
|
#guard_msgs in
|
|
#eval date.addMonthsClip 1
|
|
|
|
/--
|
|
info: date("1971-01-20")
|
|
-/
|
|
#guard_msgs in
|
|
#eval date.addYearsRollOver 1
|
|
|
|
/--
|
|
info: date("1969-01-20")
|
|
-/
|
|
#guard_msgs in
|
|
#eval date.subYearsClip 1
|
|
|
|
/--
|
|
info: date("1969-12-20")
|
|
-/
|
|
#guard_msgs in
|
|
#eval date.subMonthsClip 1
|
|
|
|
def datetime := datetime("2000-01-20T03:02:01")
|
|
|
|
/--
|
|
info: datetime("2000-01-20T04:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.addHours 1
|
|
|
|
/--
|
|
info: datetime("2000-01-20T02:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.subHours 1
|
|
|
|
/--
|
|
info: datetime("2000-01-20T03:12:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.addMinutes 10
|
|
|
|
/--
|
|
info: datetime("2000-01-20T02:52:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.subMinutes 10
|
|
|
|
/--
|
|
info: datetime("2000-01-20T03:03:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.addSeconds 60
|
|
|
|
/--
|
|
info: datetime("2000-01-20T03:01:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.subSeconds 60
|
|
|
|
/--
|
|
info: datetime("2000-01-21T03:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.addDays 1
|
|
|
|
/--
|
|
info: datetime("2000-01-19T03:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.subDays 1
|
|
|
|
/--
|
|
info: datetime("2000-02-20T03:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.addMonthsClip 1
|
|
|
|
/--
|
|
info: datetime("1999-12-20T03:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.subMonthsClip 1
|
|
|
|
/--
|
|
info: datetime("2000-02-20T03:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.addMonthsRollOver 1
|
|
|
|
/--
|
|
info: datetime("1999-12-20T03:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.subMonthsRollOver 1
|
|
|
|
/--
|
|
info: datetime("2001-01-20T03:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.addYearsClip 1
|
|
|
|
/--
|
|
info: datetime("1999-01-20T03:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.subYearsClip 1
|
|
|
|
/--
|
|
info: datetime("2001-01-20T03:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.addYearsRollOver 1
|
|
|
|
/--
|
|
info: datetime("1999-01-20T03:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetime.subYearsRollOver 1
|
|
|
|
def time := time("13:02:01")
|
|
|
|
/--
|
|
info: time("14:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval time.addHours 1
|
|
|
|
/--
|
|
info: time("12:02:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval time.subHours 1
|
|
|
|
/--
|
|
info: time("13:12:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval time.addMinutes 10
|
|
|
|
/--
|
|
info: time("12:52:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval time.subMinutes 10
|
|
|
|
/--
|
|
info: time("13:03:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval time.addSeconds 60
|
|
|
|
/--
|
|
info: time("13:01:01.000000000")
|
|
-/
|
|
#guard_msgs in
|
|
#eval time.subSeconds 60
|
|
|
|
def datetimetz := zoned("2000-01-20T06:02:01-03:00")
|
|
|
|
/--
|
|
info: zoned("2000-01-20T06:02:01.000000000-03:00")
|
|
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz
|
|
|
|
/--
|
|
info: zoned("2000-01-22T06:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.addDays 2
|
|
|
|
/--
|
|
info: zoned("2000-01-19T06:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.subDays 1
|
|
|
|
/--
|
|
info: zoned("2000-02-20T06:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.addMonthsClip 1
|
|
|
|
/--
|
|
info: zoned("1999-12-20T06:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.subMonthsClip 1
|
|
|
|
/--
|
|
info: zoned("2000-02-20T06:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.addMonthsRollOver 1
|
|
|
|
/--
|
|
info: zoned("1999-12-20T06:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.subMonthsRollOver 1
|
|
|
|
/--
|
|
info: zoned("2001-01-20T06:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.addYearsClip 1
|
|
|
|
/--
|
|
info: zoned("2001-01-20T06:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.addYearsClip 1
|
|
|
|
/--
|
|
info: zoned("2001-01-20T06:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.addYearsRollOver 1
|
|
|
|
/--
|
|
info: zoned("1999-01-20T06:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.subYearsRollOver 1
|
|
|
|
/--
|
|
info: zoned("2000-01-20T07:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.addHours 1
|
|
|
|
/--
|
|
info: zoned("2000-01-20T05:02:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.subHours 1
|
|
|
|
/--
|
|
info: zoned("2000-01-20T06:12:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.addMinutes 10
|
|
|
|
/--
|
|
info: zoned("2000-01-20T05:52:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.subMinutes 10
|
|
|
|
/--
|
|
info: zoned("2000-01-20T06:03:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.addSeconds 60
|
|
|
|
/--
|
|
info: zoned("2000-01-20T06:01:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.subSeconds 60
|
|
|
|
def now := zoned("2024-08-29T10:56:43.276801081+02:00")
|
|
|
|
/--
|
|
info: zoned("2024-08-29T10:56:43.276801081+02:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval now
|
|
|
|
/--
|
|
info: zoned("2024-08-30T10:56:43.276801081+02:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval now.addDays 1
|
|
|
|
/--
|
|
info: zoned("2000-01-20T06:01:01.000000000-03:00")
|
|
-/
|
|
#guard_msgs in
|
|
#eval datetimetz.subSeconds 60
|
|
|
|
/--
|
|
info: 3
|
|
-/
|
|
#guard_msgs in
|
|
#eval date("2024-11-17").alignedWeekOfMonth
|
|
|
|
/--
|
|
info: 4
|
|
-/
|
|
#guard_msgs in
|
|
#eval date("2024-11-18").alignedWeekOfMonth
|
|
|
|
/--
|
|
info: 3
|
|
-/
|
|
#guard_msgs in
|
|
#eval date("2024-01-21").alignedWeekOfMonth
|
|
|
|
/--
|
|
info: 4
|
|
-/
|
|
#guard_msgs in
|
|
#eval date("2024-01-22").alignedWeekOfMonth
|