将ISO8601 datetimes解析为time_t的正确方法是什么?
输入字符串是ISO8601日期时间的特定变体:
1991-02-03T04:05:06.000-07:00
(我不需要担心'Z‘或隐含的本地时间变体)
我可以使用strptime()
解析到几分之一秒,但是手册页提到了setlocale()
,所以我担心我需要对此做些什么。Do I?还是只用于月份和日期之类的名称?
似乎没有任何方法可以跳过(或处理) strptime中的小数秒,而且我的版本似乎也不支持'%z‘(而且tm_gmtoff
是非标准的),所以我不得不’手动‘解析输入的小数秒和时区偏移。很简单。
所以我假设我可以用TZ偏移量的分钟数修改从strptime获得的tm_min
。正确吗?
然后我们来看看mktime()
。似乎强制它在UTC中运行的预期方式是:
get TZ,清除TZ,
tzset()
,mktime()
,reset TZ,tzset()
(有timegm()
,但不是标准的)
我将处理很多这样的字符串,并且我不关心这个程序中的其他处理时间,所以这看起来像是很多毫无价值的开销,我能不能只在一开始就清除TZ和 tzset()
?
https://stackoverflow.com/questions/56529899
复制相似问题