相关疑难解决方法(0)

在注册表中写入的Windows时区是否可靠?

我正在创建一个应该适用于多个时区的c ++项目.应用程序接收带有参考时区的事件,并在当地时区以正确的小时以图形方式向用户显示此事件.例如,在柏林工作的用户收到在东京写的活动.来自东京的事件首先在UTC时间转换,然后从UTC重新转换为柏林的计算机当地时间,最后在他的图形界面上向用户显示.

要将UTC转换为本地计算机时间,我可以使用Windows API的多个功能来完成这项工作.但是为了将时间从另一个时区转换为UTC,我需要从Windows注册表中获取时区信息.

现在一些时区也需要考虑夏令时.我可以毫无问题地从Windows信息创建重复规则.但是我注意到DST应该发生的那天有时候在几个时区都是不正确的.例如,"E.南美标准时间".随着Windows提供的重复发生,DST开始日期提前1周开始.

如果我理解正确,Windows为此特定时区返回的重复规则表示"每年,第2个月,在该月的第2周".但是,此规则很少与互联网上发布的更改时间的正确日期相匹配,而如果规则是"每年,第2个月,在该月的第3周",则日期都是正确的.此外,正如您在提供的屏幕截图中看到的那样,Windows注册表数据显示DST开始时间为2周(以蓝色突出显示),但DST结束时间为3周(以红色显示),这是由我的代码正确计算的.可以在此处找到数据内容的描述:http://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v = vs.85).aspx

在此输入图像描述

我有几个问题

  • 我是否正确理解了重复规则?(这是MSDN所说的:https://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v = vs.85).aspx)
  • 是否存在关于多个时区的已知问题,尤其是"E.南美标准时间"?
  • 有没有理由为什么DST开始日期,显然每年定期发生,在第10个月的第3周,在第2周设定值?
  • 在Windows注册表中写入的时区是否可靠,如果没有,我应该使用Windows API的哪个功能来转换带有DST的时区,而不是使用与本地计算机上设置的时区不同的时区编写的日期?

注意我在发布此消息之前已经强烈验证了我从注册表中读取的数据是否正确.我很确定这不是这种类型的错误.

注意我正在使用Windows 7,但问题在Windows 10上保持不变

c++ time timezone date dst

21
推荐指数
1
解决办法
3806
查看次数

标签 统计

c++ ×1

date ×1

dst ×1

time ×1

timezone ×1