2011-02-03 51 views
1

我正在使用SQL Azure Silverlight应用程序。据我所知,如果DateTime种类未指定,Silverlight会将其更改为Local,并且它会以UTC时间保存到Azure。如何处理Silverlight中的DateTime和TimeZone?

一切按预期工作,但是当我从SQL Azure获得DateTime数据时,其种类为Unspecified,并且Silverlight在UI上显示时不会转换回Local时间。

例如:我在罗马(UTC +1)使用我的应用程序,我将日期设置为15:00,然后保存到数据库。在数据库中它将保存为14:00(UTC)。

现在我打开页面编辑该数据,它从数据库中查询为14:00,使用Unspecified类型,它也在页面中显示14:00,这显然不正确。

我试着在DomainService(在将这些数据返回给客户端之前)设置DateTime种类,方法是检查它的类型是否未指定,将其设置为UTC。这次,当我在页面上更改DateTime时,它的类型始终是UTC。

好像Silverlight将转换日期只有当它的种类为Unspecified,否则什么都不做,也不能转换DateTime从数据库中正确显示即使是那些DateTime有种。

我想知道,有没有解决方法或解决此问题?

回答

2

如果你知道它存储在UTC,你有没有尝试设置日期时间,然后使用Silverlight明确转换为当地时间?我不熟悉Silverlight,但是在其他形式的.NET中,您必须为UI操作明确进行此转换。

DateTime dt = GetDateFromDB(); 

dt = dt.SpecifyKind(DateTimeKind.UTC); 

DateTime dtAsLocal = dt.ToLocalTime(); 
+0

我试图做到这一点,它会正确地显示在用户界面,但是当我在UI更改日期时间,并保存到数据库中,也不会从本地转换为UTC。例如,如果我在罗马(UTC +1)将日期时间设置为15:00:00,那么它会将数据保存到15:00:00而不是14:00:00 – Anonymous 2011-02-04 02:35:02

相关问题