根据 对 多个 帖子,微软能够使用的应用程序设置的能力- WEBSITE_TIME_ZONE-控制Web服务器的时区.
为了尝试这个,我将此值设置为"东部标准时间",这是我当地的时区.
在ASP.NET MVC Razor页面上,我添加了以下代码:
DateTime.Now: @DateTime.Now
DateTimeOffset.Now: @DateTimeOffset.Now
DateTime.UtcNow: @DateTimeOffset.UtcNow
Run Code Online (Sandbox Code Playgroud)
昨晚我在东部标准时间下午5:10:07运行这个时,它给出了以下输出:
DateTime.Now: 6/18/2015 5:10:07 PM
DateTimeOffset.Now: 6/18/2015 5:10:07 PM +00:00
DateTime.UtcNow: 6/18/2015 9:10:07 PM
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,正确设置允许DateTime.Now在我的时区中返回正确的值,而不是像Azure网站/ Web应用程序那样返回UTC.DateTime.UtcNow由于显而易见的原因,它总是返回正确的值.
但是,DateTimeOffset.Now返回本地时间,但偏移量为+00:00- 几乎就像时钟被改变而不是时区一样.即使文档说明(强调我的),也会发生这种情况:
获取DateTimeOffset对象,该对象在当前计算机上设置为当前日期和时间,偏移量设置为本地时间与协调世界时(UTC)的偏移量.
那么该WEBSITE_TIME_ZONE设置会产生什么影响,DateTime.Now但它不会产生影响DateTimeOffset.Now?有什么方法可以解决这个问题吗?
作为澄清的一点,我真的不想改变服务器上的时区.我们正在制定适当的时区独立解决方案.但我仍然很好奇为什么会这样.
考虑到根据规范,应该在位于意大利的服务器上运行并且客户只是意大利人,我设计了我的应用程序.
大约一个月前,我的老板决定将其全部用于Azure.
一切顺利.唯一能给我带来一些问题的是时间服务器是UTC.
解决方案是:
一个简单的
将启动脚本修改为服务器时间( http://netindonesia.net/blogs/wely/archive/2011/06/26/setting-timezone-in-windows-azure.aspx )
B)比较费力
更改以使任何应用程序使用UTC并显示正确转换为本地时间的时间.
如果我选择解决方案A,我怀疑服务器设置了不同时区的事实可能会以某种方式与Azure产生冲突.
这是真的?