mirror of
https://github.com/fluencelabs/redis
synced 2025-03-25 20:01:04 +00:00
Localtime: compute year, month and day of the month.
This commit is contained in:
parent
06ca400f95
commit
0c12cbedbb
@ -69,4 +69,30 @@ void nolocks_localtime(struct tm *tmp, time_t t, time_t tz, int dst) {
|
|||||||
* where sunday = 0, so to calculate the day of the week we have to add 4
|
* where sunday = 0, so to calculate the day of the week we have to add 4
|
||||||
* and take the modulo by 7. */
|
* and take the modulo by 7. */
|
||||||
tmp->tm_wday = (days+4)%7;
|
tmp->tm_wday = (days+4)%7;
|
||||||
|
|
||||||
|
/* Calculate the current year. */
|
||||||
|
tmp->tm_year = 1970;
|
||||||
|
while(1) {
|
||||||
|
/* Leap years have one year more. */
|
||||||
|
time_t days_this_year = 365 + is_leap_year(tmp->tm_year);
|
||||||
|
if (days_this_year > days) break;
|
||||||
|
days -= days_this_year;
|
||||||
|
tmp->tm_year++;
|
||||||
|
}
|
||||||
|
tmp->tm_yday = days; /* Number of day of the current year. */
|
||||||
|
|
||||||
|
/* We need to calculate in which month and day of the month we are. To do
|
||||||
|
* so we need to skip days according to how many days there are in each
|
||||||
|
* month, and adjust for the leap year that has one more day in February. */
|
||||||
|
int mdays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
mdays[1] += is_leap_year(tmp->tm_year);
|
||||||
|
|
||||||
|
tmp->tm_mon = 0;
|
||||||
|
while(days >= mdays[tmp->tm_mon]) {
|
||||||
|
days -= mdays[tmp->tm_mon];
|
||||||
|
tmp->tm_mon++;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp->tm_mday = days;
|
||||||
|
tmp->tm_year -= 1900; /* Surprisingly tm_year is year-1900. */
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user