1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package datetime
- // Ordinal 1 = Midnight Monday, January 1, 1 A.D. (Gregorian)
- // | Midnight Monday, January 3, 1 A.D. (Julian)
- Ordinal :: i64
- EPOCH :: Ordinal(1)
- // Minimum and maximum dates and ordinals. Chosen for safe roundtripping.
- MIN_DATE :: Date{year = -25_252_734_927_766_552, month = 1, day = 1}
- MAX_DATE :: Date{year = 25_252_734_927_766_552, month = 12, day = 31}
- MIN_ORD :: Ordinal(-9_223_372_036_854_775_234)
- MAX_ORD :: Ordinal( 9_223_372_036_854_774_869)
- Error :: enum {
- None,
- Invalid_Year,
- Invalid_Month,
- Invalid_Day,
- Invalid_Hour,
- Invalid_Minute,
- Invalid_Second,
- Invalid_Nano,
- Invalid_Ordinal,
- Invalid_Delta,
- }
- Date :: struct {
- year: i64,
- month: i8,
- day: i8,
- }
- Time :: struct {
- hour: i8,
- minute: i8,
- second: i8,
- nano: i32,
- }
- DateTime :: struct {
- using date: Date,
- using time: Time,
- }
- Delta :: struct {
- days: i64, // These are all i64 because we can also use it to add a number of seconds or nanos to a moment,
- seconds: i64, // that are then normalized within their respective ranges.
- nanos: i64,
- }
- Month :: enum i8 {
- January = 1,
- February,
- March,
- April,
- May,
- June,
- July,
- August,
- September,
- October,
- November,
- December,
- }
- Weekday :: enum i8 {
- Sunday = 0,
- Monday,
- Tuesday,
- Wednesday,
- Thursday,
- Friday,
- Saturday,
- }
- @(private)
- MONTH_DAYS :: [?]i8{-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
|