diff options
| author | flysand7 <thebumboni@gmail.com> | 2025-03-06 20:20:05 +1100 |
|---|---|---|
| committer | flysand7 <thebumboni@gmail.com> | 2025-03-06 20:28:12 +1100 |
| commit | 47eefb3f211fc30e20316b82383d5da779b330fb (patch) | |
| tree | 8803471463040ce5f40bdd15e981a62a5dbedc84 /core | |
| parent | 7d26edb83c3884f9eeded1fd719a5ad26e602318 (diff) | |
[datetime]: Remove the definition of EPOCH
Diffstat (limited to 'core')
| -rw-r--r-- | core/time/datetime/constants.odin | 6 | ||||
| -rw-r--r-- | core/time/datetime/datetime.odin | 15 |
2 files changed, 9 insertions, 12 deletions
diff --git a/core/time/datetime/constants.odin b/core/time/datetime/constants.odin index e24709e49..b4fb4a15f 100644 --- a/core/time/datetime/constants.odin +++ b/core/time/datetime/constants.odin @@ -5,12 +5,10 @@ Type representing a mononotic day number corresponding to a date. Ordinal 1 = Midnight Monday, January 1, 1 A.D. (Gregorian) | Midnight Monday, January 3, 1 A.D. (Julian) -*/ -Ordinal :: i64 -/* +Every other ordinal counts days forwards, starting from the above date. */ -EPOCH :: Ordinal(1) +Ordinal :: i64 /* Minimum valid value for date. diff --git a/core/time/datetime/datetime.odin b/core/time/datetime/datetime.odin index 2cd90b0e7..f52bff9b6 100644 --- a/core/time/datetime/datetime.odin +++ b/core/time/datetime/datetime.odin @@ -98,7 +98,7 @@ This procedure takes the value of an ordinal and returns the day of week for that ordinal. */ day_of_week :: proc "contextless" (ordinal: Ordinal) -> (day: Weekday) { - return Weekday((ordinal - EPOCH + 1) %% 7) + return Weekday(ordinal %% 7) } /* @@ -349,8 +349,7 @@ the result is unspecified. unsafe_date_to_ordinal :: proc "contextless" (date: Date) -> (ordinal: Ordinal) { year_minus_one := date.year - 1 - // Day before epoch - ordinal = EPOCH - 1 + ordinal = 0 // Add non-leap days ordinal += 365 * year_minus_one @@ -382,17 +381,17 @@ This procedure returns the year and the day of the year of a given ordinal. Of the ordinal is outside of its valid range, the result is unspecified. */ unsafe_ordinal_to_year :: proc "contextless" (ordinal: Ordinal) -> (year: i64, day_ordinal: i64) { - // Days after epoch - d0 := ordinal - EPOCH + // Correct for leap year cycle starting at day 1. + d0 := ordinal - 1 // Number of 400-year cycles and remainder - n400, d1 := divmod(d0, 146097) + n400, d1 := divmod(d0, 365*400 + 100 - 3) // Number of 100-year cycles and remainder - n100, d2 := divmod(d1, 36524) + n100, d2 := divmod(d1, 365*100 + 25 - 1) // Number of 4-year cycles and remainder - n4, d3 := divmod(d2, 1461) + n4, d3 := divmod(d2, 365*4 + 1) // Number of remaining days n1, d4 := divmod(d3, 365) |