2016-08-15 79 views
0

我在一个需要存储用户时区信息的大型项目上工作。我们通过将System.TimeZone对象的'Id'作为字符串(是的,ID实际上是一个字符串..)持久化到数据库来这样做。是否在每个Windows系统上都有“UTC”时区?

此外,还有一个基本种子脚本,它将一个管理用户添加到数据库以提供第一个用户来设置。

现在我的问题是,我设置在该脚本的时间区域ID 中欧标准时间,然后似乎没有可用的客户服务器上..

这是个好主意将UTC作为管理员的时区存储?时区信息“UTC”在Windows系统上始终可用? (如在Windows Server 2012 R2)

+0

_“将System.TimeZone对象的'Id'置换为字符串”_ - 这是什么意思?当一个“排列”一些“作为一个字符串”的价值时,那是什么?就存储时区而言,由于每个系统都有“DateTime.UtcNow”(例如),因此UTC在每个系统上都有_better_可用。事实上,将日期/时间值存储为UTC确实是最好的方法;如果存在模糊的值,框架错误等,则很容易陷入困境。在内部使用UTC时,在显示值时(与其他本地化数据相同),根据需要转换为用户的首选时区。 –

+0

@PeterDuniho我们不排列日期时间对象,我们存储用户的时区。看起来有点奇怪,但有一个TimeZone'UTC',代表时区'格林威治标准时间'。我们存储System.TimeZone对象的'Id'属性,在我的情况下,它是'UTC'。 –

+0

_“我们不排列日期时间对象_” - 从来没有说过你做过。但_you_写道,你_do_“排列System.TimeZone对象的'Id'。根本不清楚这意味着什么。 –

回答

0

有几件事情:

  • 我想你的意思是System.TimeZoneInfo类,因为System.TimeZone类没有一个Id财产。这很好,因为无论如何你应该考虑System.TimeZone弃用。

  • TimeZoneInfo类公开的时区是标准的Windows操作系统时区,在注册表中找到以下注册表项下:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones 
    
  • 是的,"UTC"时区可以在每一个Windows系统,所以应该是"Central European Standard Time"时区。如果它们在客户的Windows计算机上不可用,那么他们的Windows注册表已被手动操作或损坏。它可以通过从另一台计算机备份上面显示的注册表项并进行复制或简单安装最新更新的列表here来恢复。 (2016年6月更新,截至撰写本文时为止。)

  • 存储Id的时区非常好。是的,它是一个字符串。这就是时区标识符的工作原理。您应该阅读the time zone tag wiki以获得更好的理解。

  • 没有人可以回答您的管理员应该使用哪个时区。这完全针对您的应用程序。也许世界各地可能会有多个管理员,或者管理员可能需要使用其他时区在上下文中查看一些数据。这里没有一个正确的方法。您可以从阅读Daylight saving time and time zone best practices获得一些建议。

  • 时区问题可能会很棘手,在进一步研究之前,您应该研究一下StackOverflow的许多问题。您可能还想阅读维基百科有关一般或特定位置的时区的许多文章,或查看培训材料(如Pluralsight上的视频)。

相关问题