21 #define NGX_TIME_SLOTS 64
46 [
sizeof(
"1970/09/28 12:00:00")];
48 [
sizeof(
"Mon, 28 Sep 1970 06:00:00 GMT")];
50 [
sizeof(
"28/Sep/1970:12:00:00 +0600")];
52 [
sizeof(
"1970-09-28T12:00:00+06:00")];
55 static char *week[] = {
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat" };
56 static char *months[] = {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
57 "Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec" };
62 ngx_cached_err_log_time.
len =
sizeof(
"1970/09/28 12:00:00") - 1;
63 ngx_cached_http_time.
len =
sizeof(
"Mon, 28 Sep 1970 06:00:00 GMT") - 1;
64 ngx_cached_http_log_time.
len =
sizeof(
"28/Sep/1970:12:00:00 +0600") - 1;
65 ngx_cached_http_log_iso8601.
len =
sizeof(
"1970-09-28T12:00:00+06:00") - 1;
67 ngx_cached_time = &cached_time[0];
76 u_char *p0, *p1, *p2, *p3;
90 msec = tv.tv_usec / 1000;
94 tp = &cached_time[slot];
108 tp = &cached_time[slot];
116 p0 = &cached_http_time[slot][0];
118 (void)
ngx_sprintf(p0,
"%s, %02d %s %4d %02d:%02d:%02d GMT",
119 week[gmt.ngx_tm_wday], gmt.ngx_tm_mday,
120 months[gmt.ngx_tm_mon - 1], gmt.ngx_tm_year,
121 gmt.ngx_tm_hour, gmt.ngx_tm_min, gmt.ngx_tm_sec);
123 #if (NGX_HAVE_GETTIMEZONE)
125 tp->
gmtoff = ngx_gettimezone();
128 #elif (NGX_HAVE_GMTOFF)
131 cached_gmtoff = (
ngx_int_t) (tm.ngx_tm_gmtoff / 60);
132 tp->
gmtoff = cached_gmtoff;
138 tp->
gmtoff = cached_gmtoff;
143 p1 = &cached_err_log_time[slot][0];
145 (void)
ngx_sprintf(p1,
"%4d/%02d/%02d %02d:%02d:%02d",
146 tm.ngx_tm_year, tm.ngx_tm_mon,
147 tm.ngx_tm_mday, tm.ngx_tm_hour,
148 tm.ngx_tm_min, tm.ngx_tm_sec);
151 p2 = &cached_http_log_time[slot][0];
153 (void)
ngx_sprintf(p2,
"%02d/%s/%d:%02d:%02d:%02d %c%02d%02d",
154 tm.ngx_tm_mday, months[tm.ngx_tm_mon - 1],
155 tm.ngx_tm_year, tm.ngx_tm_hour,
156 tm.ngx_tm_min, tm.ngx_tm_sec,
157 tp->
gmtoff < 0 ?
'-' :
'+',
160 p3 = &cached_http_log_iso8601[slot][0];
162 (void)
ngx_sprintf(p3,
"%4d-%02d-%02dT%02d:%02d:%02d%c%02d:%02d",
163 tm.ngx_tm_year, tm.ngx_tm_mon,
164 tm.ngx_tm_mday, tm.ngx_tm_hour,
165 tm.ngx_tm_min, tm.ngx_tm_sec,
166 tp->
gmtoff < 0 ?
'-' :
'+',
172 ngx_cached_time = tp;
173 ngx_cached_http_time.
data = p0;
174 ngx_cached_err_log_time.
data = p1;
175 ngx_cached_http_log_time.
data = p2;
176 ngx_cached_http_log_iso8601.
data = p3;
201 tp = &cached_time[slot];
203 if (tp->
sec == sec) {
214 tp = &cached_time[slot];
220 p = &cached_err_log_time[slot][0];
222 (void)
ngx_sprintf(p,
"%4d/%02d/%02d %02d:%02d:%02d",
223 tm.ngx_tm_year, tm.ngx_tm_mon,
224 tm.ngx_tm_mday, tm.ngx_tm_hour,
225 tm.ngx_tm_min, tm.ngx_tm_sec);
229 ngx_cached_err_log_time.
data = p;
244 return ngx_sprintf(buf,
"%s, %02d %s %4d %02d:%02d:%02d GMT",
245 week[tm.ngx_tm_wday],
247 months[tm.ngx_tm_mon - 1],
268 (tm.ngx_tm_year > 2037) ?
269 "%s, %02d-%s-%d %02d:%02d:%02d GMT":
270 "%s, %02d-%s-%02d %02d:%02d:%02d GMT",
271 week[tm.ngx_tm_wday],
273 months[tm.ngx_tm_mon - 1],
274 (tm.ngx_tm_year > 2037) ? tm.ngx_tm_year:
275 tm.ngx_tm_year % 100,
286 ngx_uint_t n, sec, min, hour, mday, mon, year, wday, days, leap;
296 wday = (4 + days) % 7;
310 days = days - (31 + 28) + 719527;
319 year = (days + 2) * 400 / (365 * 400 + 100 - 4 + 1);
321 yday = days - (365 * year + year / 4 - year / 100 + year / 400);
324 leap = (year % 4 == 0) && (year % 100 || (year % 400 == 0));
325 yday = 365 + leap + yday;
337 mon = (yday + 31) * 10 / 306;
341 mday = yday - (367 * mon / 12 - 30) + 1;
385 tm.tm_hour = (int) (when / 3600);
387 tm.tm_min = (int) (when / 60);
388 tm.tm_sec = (int) (when % 60);
396 if (next - now > 0) {