POSIX方式将用户输入转换为utc offset到日历时间

时间:2010-12-14 16:01:08

标签: c timezone posix

是否有POSIX方式如何将带有UTC偏移的用户输入转换为time_t?我希望有像

这样的东西
strptime( buf, "%Y-%m-%d-UTC%O", &input_time );

其中%O是UTC偏移量。

不幸的是,tm_gmtoffstruct tm的{​​{1}}扩展似乎不适用于Solaris(10),是吗?

2 个答案:

答案 0 :(得分:0)

我唯一能想到的是复制字符串,搜索并用零之一替换UTC偏移量,两次解析并对difftime(...)采取差异。

可能有一种聪明的技术,但现在我缺少咖啡。

答案 1 :(得分:0)

处理时区信息的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 );

干杯,

马丁。