是否有POSIX方式如何将带有UTC偏移的用户输入转换为time_t?我希望有像
这样的东西strptime( buf, "%Y-%m-%d-UTC%O", &input_time );
其中%O是UTC偏移量。
不幸的是,tm_gmtoff
对struct tm
的{{1}}扩展似乎不适用于Solaris(10),是吗?
答案 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 );
干杯,
马丁。