【问题标题】:Migration from local server to Azure: TIMEZONE UTC. How to solve?从本地服务器迁移到 Azure:TIMEZONE UTC。怎么解决?
【发布时间】:2011-09-24 03:39:48
【问题描述】:

我设计我的应用程序时考虑到,根据规范, 应该在位于意大利的服务器上运行,并且客户端只能是意大利人。

大约一个月前,我的老板决定将这一切都放在 Azure 上。

一切都很顺利。唯一给我带来问题的是时间服务器是 UTC。

解决办法是:

A) 简单

修改启动脚本为服务器时间( http://netindonesia.net/blogs/wely/archive/2011/06/26/setting-timezone-in-windows-azure.aspx )

B) 更费力

更改以使任何应用程序使用 UTC 并显示正确转换为本地时间的时间。

如果我寻求解决方案我的疑问是,服务器设置了不同的时区这一事实可能会以某种方式与 Azure 产生冲突。

这是真的吗?

【问题讨论】:

  • 选项 A 听起来很简单,尽管您必须确保它适用于夏令时,否则您会发现在夏天一切都需要一个小时。当我遇到同样的问题时,我选择了选项 B,因为这样我就不会对在国外使用该应用程序的人有任何问题。
  • 你能告诉我们更多关于你的架构的信息吗?它是基于 Web 还是 Windows 客户端,是否通过 Web 服务等。那么我们应该能够为您提供更多帮助。
  • 所有 Windows Azure VM 都在 UTC 下,恕我直言,这是云的一个非常好的设计属性。去B,你不会后悔的。

标签: datetime azure utc datetimeoffset


【解决方案1】:

我已请求 MS 支持。

这是回复:

不建议使用启动任务更改 Azure 虚拟机上的服务器时间,您应该在代码中使用 TimeZoneInfo.ConvertTimeFromUTCTime 等方法。

所以我不会更改服务器时区。 等待支持人员的回复,我发现 SqlServer 2008 有一个完美的 DateTimeOffset 数据类型!

http://blogs.msdn.com/b/davidrickard/archive/2012/04/07/system-datetime-good-practices-and-common-pitfalls.aspx

【讨论】:

    【解决方案2】:

    DateTime.Now 和 DateTime.Today 在客户端和服务器端存在两个问题。 当您将 DateTime 对象从客户端传递到 Azure 时,它​​的 Kind 等于 Local,并且它包含时区信息。 (2011 年 6 月 10 日 12:30am-7)

    但是,当您将其保存到数据库时,区域信息会丢失。随后,当从数据库中读取此字段时,它会使用 Utc 区域创建 DateTime(2011 年 6 月 10 日,凌晨 12:30 0)

    最终,您的客户端会错误地读取日期时间。

    有几个选项可以在客户端解决此问题。

    1) 在方法参数和数据库中将 DateTime 转换为 DateTimeOffset。这将保证您的本地区域(即 PST)将保存在 db 中

    2) 使用 DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified) - 这样 DateTime 的类型是未指定的,随后按原样保存在数据库中。

    var timeNow = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified);
    serviceClient.SaveTime(timeNow);
    var dateTime = serviceClient.GetTime();
    

    在服务器端调用 DateTime.Now 时要小心。你最好使用 DateTime.UtcNow。此时间不应用于业务数据。理想情况下,您需要重构代码并从客户端传递 DateTime 或 DateTimeOffset。

    【讨论】:

    • @Bugeo 当 DateTime 对象被反序列化并且 Kind 是 Local 时,它会将新的 DateTime 设置为调整为新的时区,同时保留 2 个时区之间的差异记录。
    【解决方案3】:

    几年前,我开始设计我的所有应用程序,以便在客户端和服务器上使用 UTC 处理日期,并且从那时起就没有回头。

    【讨论】:

    • 您对 DateTime 与 DateTimeOffset 的看法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多