diff options
| author | manuel <manuel@mausz.at> | 2013-02-04 00:08:53 +0100 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2013-02-04 00:08:53 +0100 |
| commit | 69aec538b456402170dc723af417ba5c05389c32 (patch) | |
| tree | e6f34c543f17c6392447ea337b2e2868212424d1 /datetime.c | |
| download | qmail-69aec538b456402170dc723af417ba5c05389c32.tar.gz qmail-69aec538b456402170dc723af417ba5c05389c32.tar.bz2 qmail-69aec538b456402170dc723af417ba5c05389c32.zip | |
qmail 1.03 import
Diffstat (limited to 'datetime.c')
| -rw-r--r-- | datetime.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/datetime.c b/datetime.c new file mode 100644 index 0000000..7b8a803 --- /dev/null +++ b/datetime.c | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | /* 19950925 */ | ||
| 2 | #include "datetime.h" | ||
| 3 | |||
| 4 | void datetime_tai(dt,t) | ||
| 5 | struct datetime *dt; | ||
| 6 | datetime_sec t; | ||
| 7 | { | ||
| 8 | int day; | ||
| 9 | int tod; | ||
| 10 | int year; | ||
| 11 | int yday; | ||
| 12 | int wday; | ||
| 13 | int mon; | ||
| 14 | |||
| 15 | tod = t % 86400; | ||
| 16 | day = t / 86400; | ||
| 17 | if (tod < 0) { tod += 86400; --day; } | ||
| 18 | |||
| 19 | dt->hour = tod / 3600; | ||
| 20 | tod %= 3600; | ||
| 21 | dt->min = tod / 60; | ||
| 22 | dt->sec = tod % 60; | ||
| 23 | |||
| 24 | wday = (day + 4) % 7; if (wday < 0) wday += 7; | ||
| 25 | dt->wday = wday; | ||
| 26 | |||
| 27 | day -= 11017; | ||
| 28 | /* day 0 is march 1, 2000 */ | ||
| 29 | year = 5 + day / 146097; | ||
| 30 | day = day % 146097; if (day < 0) { day += 146097; --year; } | ||
| 31 | /* from now on, day is nonnegative */ | ||
| 32 | year *= 4; | ||
| 33 | if (day == 146096) { year += 3; day = 36524; } | ||
| 34 | else { year += day / 36524; day %= 36524; } | ||
| 35 | year *= 25; | ||
| 36 | year += day / 1461; | ||
| 37 | day %= 1461; | ||
| 38 | year *= 4; | ||
| 39 | yday = (day < 306); | ||
| 40 | if (day == 1460) { year += 3; day = 365; } | ||
| 41 | else { year += day / 365; day %= 365; } | ||
| 42 | yday += day; | ||
| 43 | |||
| 44 | day *= 10; | ||
| 45 | mon = (day + 5) / 306; | ||
| 46 | day = day + 5 - 306 * mon; | ||
| 47 | day /= 10; | ||
| 48 | if (mon >= 10) { yday -= 306; ++year; mon -= 10; } | ||
| 49 | else { yday += 59; mon += 2; } | ||
| 50 | |||
| 51 | dt->yday = yday; | ||
| 52 | dt->year = year - 1900; | ||
| 53 | dt->mon = mon; | ||
| 54 | dt->mday = day + 1; | ||
| 55 | } | ||
