更新偏移 - 这个问题并没有扩展方法不正确的时区在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工作是否值得?
任何想法可能是错误的,或者如何调试它将不胜感激。
你看到在你的SQL Azure数据库上运行的Emulator中的同样的问题?如果你这样做,你可以使用Visual Studio并且以这种方式进行故障排除 – Tom 2012-02-20 16:20:20
@Tom我会尝试一下,谢谢你 – 2012-02-20 17:09:01