POSIX способ преобразования пользовательского ввода со смещением utc в календарное время - PullRequest
0 голосов
/ 14 декабря 2010

Есть ли способ POSIX, как преобразовать пользовательский ввод со смещением UTC в time_t?Я надеялся на что-то вроде

strptime( buf, "%Y-%m-%d-UTC%O", &input_time );

, где% O будет смещением UTC.

К сожалению, расширение tm_gmtoff до struct tm, похоже, недоступно в Solaris (10) это так?

Ответы [ 2 ]

0 голосов
/ 19 января 2011

Способ обработки информации о часовом поясе в POSIX, по-видимому, заключается в установке переменной среды TZ . Поэтому я решил установить TZ с указанным пользователем часовым поясом, прежде чем работать с функциями времени:

/* Get actual time */
time( &now );

/* Backup time zone */
old_tz = getenv( "TZ" );

/* Set user time zone */
setenv("TZ", zone_s, 1);

/* Get time components in user timezone */
comptime = localtime( &now );

/* Set time */
sscanf(time_string, "%d:%d", &x, &y) );
comptime->tm_hour = x;
comptime->tm_min = y;
comptime->tm_sec = 0;

/* Set date */
sscanf( date_string, "%d-%d-%d", &x, &y, &z );
comptime->tm_year = x-1900;
comptime->tm_mon = y-1;
comptime->tm_mday = z;

/* Restore time zone */
setenv( "TZ", old_tz, 1 );

Приветствия

Martin.

0 голосов
/ 14 декабря 2010

Единственное, о чем я могу подумать, - это скопировать строку, найти и заменить смещение UTC на единицу, равное нулю, проанализировать оба раза и взять разницу с difftime(...).

Вероятно, есть хитрая техника, но сейчас мне не хватает кофе.

...