我一直在绞尽脑汁试图解决这个问题 with this API
我最初的实现是这样的:
// TimezonePtr is just a share_ptr to the timezone
std::tm getGMT(const std::tm& rawtime, TimezonePtr tz)
{
std::tm result = rawtime;
const auto loct = mktime_z(tz.get(), &result);
gmtime_r(&loct, &result);
return result;
}
但是,这没有考虑夏令时。例如,如果我给它输入日期 Sep 28 2012 15:54:24
,我会返回 Sep 28 2012 20:54:24
,这是不正确的。看起来我想使用 localtime_rz
,只是需要一个纪元,这让我抓狂,因为如果我能得到纪元,那么我就已经有了答案。 :(
我怎样才能做到这一点?
最佳答案
mktime_z
将 struct tm
作为其参数之一。如果您不知道夏令时是否对输入日期有效,您希望将 tm
的 tm_isdst
成员设置为 -1
表示当您调用 mktime
时,系统应该确定 DST 是否对该日期/时间/时区有效。
至少对我来说,这似乎工作正常(即,它正确地得出结论,至少在我所在的时区,DST 在 2012 年 9 月生效)。
关于c++ - 使用 ctime 将带时区的本地时间转换为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38310778/