我想在DST时区添加小时。正确添加小时数,但未识别DST时区。
示例:我正在添加4小时到“2015年10月31日星期六20:00:00 GMT-0400”,这是(东部夏令时)。添加4小时后,我将收到“Sun Nov 01 2015 00:00:00 GMT-0400”。由于夏令时已于2015年11月1日结束,预期结果为“Sun Nov 01 2015 00:00:00 GMT-0500”。
在测试时将本地计算机时区设置为(UTC-05:00)美国东部时间(美国和加拿大)。
date::sys_seconds
parse(const std::string& str)
{
std::istringstream in(str);
date::sys_seconds tp;
in >> date::parse("%FT%TZ", tp);
if (in.fail())
{
in.clear();
in.str(str);
in >> date::parse("%FT%T%z", tp);
}
return tp;
}
int
main()
{
using namespace date;
std::cout << parse("2015-08-27T11:31:40+0100").time_since_epoch() << '\n';
std::cout << parse("2015-08-27T10:31:40Z").time_since_epoch() << '\n';
}
-Jimit
答案 0 :(得分:1)
“目前,夏令时从3月的第二个星期日开始 并在11月的第一个星期日结束,随着时间的变化而变化 当地时间凌晨2点。“
事实上,您可以看到5到6小时轮班之间的夏令时变化。
答案 1 :(得分:0)
一些事情
请更新您的问题,以便在StackOverflow上显示您的代码。您应该只显示提出问题所需的部分。
在Plunker上查看您的代码,您应该更喜欢使用format
而不是toString
,但这不是问题的原因。
此外,您正在创建一个字符串,只是为了再次解析它,这是低效的,有时会导致错误。虽然这也不是原因。
主要问题是您假设DST在午夜结束于美国东部时区,而实际上在凌晨2:00结束。时钟将在1毫秒后从2015-11-01T01:59:59.999-04:00
前进到2015-11-01T01:00:00.00-05:00
。
时刻可以解决这个问题。
请注意我突出显示的部分,显示由于DST回落而重复1:00小时的偏移。