所以在过去的 4 个小时里,我一直在试图解决这个问题。Windows Azure 上的 DateTime.Now 是 2013 年 1 月 10 日,而本地时间是 2013 年 1 月 9 日。我已经尝试了书中的所有内容以使其对齐调用 DateTime.Now.ToLocalTime(),执行 UTC,但我仍然无法解决问题。
4 回答
private DateTime ConvertToCentral()
{
DateTime timeUtc = DateTime.UtcNow;
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);
return cstTime;
}
答案与 Gaurav 发布的相同 - Azure 服务器在 UTC(格林威治标准时间)上运行,而不是您的当地时间。例如,Arizona 是 UTC - 7 小时,因此我们将本地时间添加 7 小时以获得 UTC。Azure 门户和浏览器可能会根据您的本地时间调整一些时间,但是在代码中使用 DateTime.Now 时,您需要使用 DateTime.Now.UTC - 如果您想调整在 Azure 中运行的应用程序的用户显示,然后添加TimeZoneOffset 的 ServiceConfiguration 设置(即 -7)并显示 DateTime.Now.AddHours(TimeZoneOffset)。
Windows Azure 机器供您使用,因此如果您想要不同的时区,请直接进行设置。
最简单的方法是创建一个非常简单的启动任务并使用tzutil,即 Windows 时区实用程序。我们使用以下内容:
tzutil /s "GMT Standard Time"
默认情况下,它仅安装在 Windows Server 2008 R2 或 Windows Server 2012 映像上。
完整的细节在这里:http ://wely-lau.net/2011/06/26/setting-timezone-in-windows-azure-3/
当前 Windows Azure VM 使用 UTC,即使它们不使用,您也不应该期望它们使用与您相同的时区。
在分布式应用程序中,如果您尽可能频繁地使用 UTC,并且在您不能使用 UTC 的情况下,您可以将 UTC 与本地时间一起使用或单独使用本地时间,但每次您使用本地时间时,您会省去很多麻烦你应该具体知道你所在的时区。
如果您忽略这些考虑,您也可以在 2555 年找到自己(不是开玩笑——这是真的)。