gpt4 book ai didi

c++ - mktime 澳大利亚时区错误?

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:20 30 4
gpt4 key购买 nike

我想用澳大利亚/悉尼时区构造一个struct tm,所以我首先使用:

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,有人知道为什么吗?

最佳答案

使用这个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 相比,该库使用起来更容易、更安全。

关于c++ - mktime 澳大利亚时区错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25903518/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com