【问题标题】:C# DateTime.Now in Azure not reporting GMT - can the default timezone be set?C# DateTime.Now 在 Azure 中不报告 GMT - 可以设置默认时区吗?
【发布时间】:2015-08-09 10:04:17
【问题描述】:

在 azure 网站中,DateTime.Now 总是返回 UTC 时间,我需要能够将时区设置为 GMT,所以目前所有时间都是一个小时。

我现在无法更改任何代码,所以问题是是否可以通过配置或编程方式更改默认时区(可以在Global.asax 以确保日期格式正确)。

【问题讨论】:

  • GMT 与 UTC 和 has no offset 基本相同。您可能将它与 BST 或 IST 混淆了?在任何情况下,您都应该对特定时区建立任何依赖关系,如果时区对您很重要,请使用 DateTimeOffset。
  • 是的对不起,我的意思是 BST - 有时很难记住它实际上是夏天! DateTimeOffset 肯定是理想的,我这里有一个旧代码库,我无法轻易更改
  • 不确定,但在 webrole 中尝试。所以实例化 webrole 应该有文化集
  • @MaheshMalpani 更改 Web 角色的时区是 unreliable。在任何情况下,OP 都在使用有 一种可靠的方式来更改时区的网站

标签: c# asp.net azure azure-web-app-service


【解决方案1】:

首先,GMT 与 UTC 基本相同 - it has no offset。准确地说,UTC supersedes GMT 。您可能会将它与夏令时 GMT+1:00 的 BST 混淆。

一般来说,对时区做出假设是个坏主意,尤其是在 Web 应用程序中。你应该使用 DateTimeOffset 而不是 DateTime。

幸运的是,Azure 网站最近发生了变化,现在您可以change the timezone of an Azure Web site 以一种受支持且可靠的方式。来自 MSDN 博文

您需要做的就是添加一个名为 WEBSITE_TIME_ZONE 的Application Setting(通过门户或管理 API),并将其设置为在 HKLM\Software\Microsoft\Windows Nt 下的 Windows 注册表中定义的时区名称\CurrentVersion\Time Zones\(例如,“AUS Eastern Standard Time”)。

不幸的是,Windows 混淆了时区,并使用名称“GMT 标准时间”来指代 BST,而使用“UTC”来指代 GMT/UTC。

【讨论】:

  • 万岁!作为其他寻找 GMT/BST 的人的参考,WEBSITE_TIME_ZONE 的值是“GMT 标准时间”
  • @Paul 几乎 - 正如我所说的 GMT 不是 BST,但 Windows 中没有 no BST* 并且“GMT 标准时间”被用作“英国标准时间”时间”。真正的 GMT 称为“UTC”
  • @PanagiotisKanavos 设置准确反映本地(伦敦)时间很方便。与显式设置 DST 不同,然后在时钟更改时必须手动恢复为 GMT。就个人而言,我更喜欢这个。虽然对于某些要求,授予它可能不适合......
  • @Phil 这实际上是错误的。如果您假设特定的本地时间偏移,则必须转换偏移。如果您想存储任何未来的时间,您实际上必须在生成“本地”时间之前考虑 DST。如果您关心正确的间隔计算,存储 过去 日期也需要存储偏移量。 DateTimeOffset 虽然根本不需要转换。它不会因夏令时而改变。即使英国放弃 DST,如果您想避免更改,您应该使用 IANA 时区名称而不是偏移量,以及像 NodaTime 这样的库。
  • @Phil btw 航空公司发布航班时间正是因为它们不需要转换。他们也不能对落在 DST 更改时间的出发时间有歧义。您会看到当地时间,因为航空公司、OTA 的网站会将其转换为当地时间。顺便说一句,OTA(在线旅行社)也为长途飞行增加了不同的费用,这就是他们不能使用当地时间的原因
猜你喜欢
  • 2018-05-23
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多