[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: autoconfig, and timezones ?
Matti Aarnio <mea@nic.funet.fi>
> Hello,
>
> Anybody with good tips at how to handle the timezones with
> autoconfig ? That thing is extremely varied :-(
libc usually gets it right, so:
const char* rfctime( void ) {
static char date[128];
const char * months[] = { "Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
const char * days[] = { "Sun", "Mon", "Tue", "Wed",
"Thu", "Fri", "Sat" };
time_t now;
struct tm gmt;
struct tm local;
struct tm conv;
signed int diff;
now = time(0);
gmt = *(gmtime(&now));
local = *(localtime(&now));
conv = *(localtime(&now));
/* if GMT were local, what would it be? */
conv.tm_year = gmt.tm_year;
conv.tm_mon = gmt.tm_mon;
conv.tm_mday = gmt.tm_mday;
conv.tm_hour = gmt.tm_hour;
conv.tm_min = gmt.tm_min;
conv.tm_sec = gmt.tm_sec;
conv.tm_wday = gmt.tm_wday;
conv.tm_yday = gmt.tm_yday;
/* see how far the real local is from GMT-as-local */
/* should convert to signed int from double properly */
diff = ((int)mktime(&local) - (int)mktime(&conv))/ 60;
sprintf(date, "%3s, %d %3s %4d %02d:%02d:%02d %03+d%02d",
days[local.tm_wday], local.tm_mday, months[local.tm_mon],
local.tm_year+1900, local.tm_hour, local.tm_min, local.tm_sec,
diff/60, diff%60);
return (date);
}
--Arnt