2012-02-20 36 views
3

更新偏移 - 这个问题并没有扩展方法不正确的时区在Azure中

内说谎,因为事实证明,有一个与我的扩展方法没有实际问题。当我直接从网络服务器提供DateTime时,就像DateTime.UtcNow.ToUserLocalTime()一样,我意识到该方法实际上产生了正确的结果。问题在于我不小心在显示不正确的日期时间内调用了两次 - 首先在控制器中,然后在视图中再次调用它。一个非常愚蠢的错误,在我的头靠墙撞了几个小时后才意识到。从现在开始,它仅由控制器调用。

我在运行在Azure中的ASP.Net MVC3应用程序中的时区转换有问题。当我在本地运行应用程序时,一切正常,但是当我在Azure中运行完全相同的代码时,它将在1小时内关闭。

我已经创建了DateTime的扩展方法,用于根据用户选择的时区转换DateTime。所有日期时间都以UTC格式存储。

public static DateTime ToUserLocalTime(this DateTime date) 
{ 
    date = DateTime.SpecifyKind(date, DateTimeKind.Utc); 
    if (!string.IsNullOrEmpty(SecurityContext.CurrentUser.TimeZone)) 
    { 
     var timezone = SecurityContext.CurrentUser.TimeZone; 
     var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timezone); 
     return TimeZoneInfo.ConvertTime(date, timeZoneInfo); 
    } 

    return date; 
} 

SecurityContext.CurrentUser.TimeZone是时区的字符串表示,在我的情况W. Europe Standard Time

当我从本地的SQL数据库中获取的日期时间2011-12-02 13:46:22,并通过我的ToUserLocalTime方法运行它,它转换为W. Europe Standard Time在我的本地环境中,我得到2011-12-02 14:46:22这是正确的。但是,当我在Azure中运行完全相同的代码时,从我的SQL-Azure数据库中读取,其中包含完全相同的DateTime和所选时区,我获得2011-12-02 15:46:22。这让我感到困惑,为什么最终会关闭一个小时?

我真的不知道如何调试,因为我无法在本地重现它。有没有办法在Azure角色中进行调试,以便我能够看到代码中究竟发生了什么?像Visual Studio中的调试器一样?

我尝试在发布应用程序时启用IntelliTrace,但是当我这样做时,应用程序无法启动,并在连接到Azure-SQL db时抱怨连接错误。我没有IntelliTrace的经验,生成的日志能告诉我关于这里发生了什么的任何事情吗?在这种情况下花费时间让InteliTrace工作是否值得?

任何想法可能是错误的,或者如何调试它将不胜感激。

+0

你看到在你的SQL Azure数据库上运行的Emulator中的同样的问题?如果你这样做,你可以使用Visual Studio并且以这种方式进行故障排除 – Tom 2012-02-20 16:20:20

+0

@Tom我会尝试一下,谢谢你 – 2012-02-20 17:09:01

回答

4

有关使用

return TimeZoneInfo.ConvertTimeFromUTCTime(date, timeZoneInfo); 

,而不是

return TimeZoneInfo.ConvertTime(date, timeZoneInfo); 

什么参考:http://social.msdn.microsoft.com/Forums/en-AU/windowsazuredevelopment/thread/04be9d07-fcdb-4bf2-b380-57c062382409

然后,您可以删除行date = DateTime.SpecifyKind(date, DateTimeKind.Utc);,假设你的约会总是有不明那种

或者它可以是夏令时搞砸了吗?见http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/92696af4-5169-4015-90eb-79da3c5136c2/

要测试此,尝试去改变你的时区的页面,通过点击你的计算机时钟和“更改日期和时间设置。然后取消/检查夏令自动调整时间。

+0

谢谢你的回答!使用'ConvertTimeFromUtc'代替,但不幸的是,这并没有帮助,我认为这不是一个夏令时问题,但我不确定是否。 – 2012-02-20 16:50:11

+0

编辑夏令时测试程序。1小时关闭听起来很像夏令时刚开g搞砸了。 – 2012-02-21 04:17:12

+0

感谢您的更新,不幸的是,本地没有任何区别。无论是否选中自动调整夏令时设置,我都会得到相同的正确结果。 – 2012-02-21 14:47:00