我想构建一个带struct tm
时区的Australia/Sydney
,所以我首先使用:
setenv("TZ","Australia/Sydney",1);
tzset()
然后我将struct tm
设置为:
struct tm _tm;
_tm.tm_sec = 0;
_tm.tm_min = 45;
_tm.tm_hour = 7;
_tm.tm_mday = 18;
_tm.tm_mon = 8;
_tm.tm_year = 114;
这应该设置为澳大利亚时间2014/09/18 7:45:00 然后我打电话给:
time_t other_tm = mktime(&_tm);
此次通话后,other_tm
和_tm
指向澳大利亚时间早上6:45!原因是other_tm有价值1410986700你可以从Epoc转换器验证它指向上午6:45,任何人都知道为什么?
答案 0 :(得分:0)
使用此cross-platform, free, open-source C++11/14 <chrono>
-based library,这是获得所需结果的现代方法:
#include "tz.h"
#include <iostream>
int
main()
{
using namespace std::chrono_literals;
using namespace date;
auto zt = make_zoned("Australia/Sydney", local_days{2014_y/9/18} + 7h + 45min);
std::cout << zt.get_sys_time().time_since_epoch().count() << '\n';
}
输出:
1410990300
(即1410986700 + 3600)
使用此库比使用过时的C API更容易和更安全地进行时间处理。