如何在我的应用程序中添加对时区的支持?

时间:2014-02-05 01:41:44

标签: timezone

我们目前正在数据库中存储Pacific / Hawaii的本地日期时间。假设我无法将这些日期更改为UTC,我需要添加哪些信息才能支持时区?

我的想法是:

  • 首先,添加时区字段以指示用户正在查看的时区。 (用户将从下拉列表中选择此项)
  • 其次,添加时区字段以指示数据库中当前日期时间值的时区(太平洋/夏威夷)。
  • 第三,添加偏移以涵盖DST小时

所以说来自America / Los_Angeles的用户查看该网站,它会从数据库中提取日期时间,附加偏移并应用夏威夷的时区,然后再将其转换为洛杉矶时间。对于任何计算或比较,我会先将夏威夷时间转换为UTC,然后将UTC结果转换为洛杉矶。我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

将时间存储为UTC时间将是一个更强大的解决方案,因为时区对于显示数据的特定PC是本地的。在您的情况下,如果您存储时间加偏移量,您如何决定存储哪个偏移量?如果涉及多个时区,则不是一个可行的解决方案。

答案 1 :(得分:0)

您的问题非常广泛,如果不了解您的应用程序,平台,您如何使用收集日期和时间,它们代表什么等等,我只能说一般性。

  • 建议以UTC格式存储,但这只是按照惯例。主要的必需品是您存储数据的时区没有DST(夏威夷自1947年以来没有),而您依赖于计算机的操作系统或环境设置来确定什么时区使用。如果必须,您可以使用夏威夷时区。一定要把它记录在某个地方!在应用程序的生命周期中出现的任何其他人肯定会感到惊讶。

  • 虽然它会萎缩,但这样做绝对没有优势。在推出这些更改并使用UTC时,您可以轻松地将数据转换为UTC。 (这将是首选方法。)

  • 夏威夷的IANA时区ID为"Pacific/Honolulu"。如果您使用的是Windows / .Net,则TimeZoneInfo ID为"Hawaiian Standard Time"。无论哪种方式,它们都必须以这种方式拼写,装箱和打断。

  • 确保您了解时区偏移和时区是两个不同的概念。虽然夏威夷可能使用-10:00的固定偏移量,但大多数时区都不能保证这一点。请阅读timezone tag wiki了解更多详情。

  • 您可能不应该尝试实现自己的时区逻辑。几乎每种语言都有这样的库。看看什么适合您的平台。 (如果您提供详细信息,我可以提供建议。)