【问题标题】:How to deal with DateTime and TimeZone in Silverlight?Silverlight 中如何处理 DateTime 和 TimeZone?
【发布时间】:2011-02-03 03:10:43
【问题描述】:

我正在使用 SQL Azure 开发 Silverlight 应用程序。据我所知,如果 DateTime Kind 未指定,Silverlight 会将其更改为 Local 并将保存到 Azure 作为 UTC 时间。

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

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

现在我打开页面来编辑该数据,它从数据库中查询为 14:00,Unspecified 种类,它还在页面中显示 14:00,这显然是不正确的。

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

似乎silverlight只有当它的种类是Unspecified时才会转换日期,否则它什么也不做,它也不能从数据库中转换DateTime以正确显示,即使那些DateTime有Kind。

我想知道,有没有解决这个问题的办法?

【问题讨论】:

    标签: silverlight wcf datetime timezone azure


    【解决方案1】:

    如果您知道它以 UTC 存储,您是否尝试过设置日期时间,然后使用 Silverlight 显式转换为本地时间?我不熟悉 Silverlight,但在其他形式的 .NET 中,您必须为 UI 操作显式执行此转换。

    DateTime dt = GetDateFromDB();
    
    dt = dt.SpecifyKind(DateTimeKind.UTC);
    
    DateTime dtAsLocal = dt.ToLocalTime();
    

    【讨论】:

    • 我尝试这样做,它会正确显示在 UI 上,但是当我在 UI 中更改日期时间并保存到数据库时,它不会从本地转换为 UTC。例如,如果我将罗马 (UTC +1) 的日期时间设置为 15:00:00,它将以 15:00:00 而不是 14:00:00 保存到数据库中
    • 你能分享你用来准备保存的代码吗?
    • 我知道我的问题,有人不使用Binding,而是直接将datePicker.SelectedDate值设置为DateTime,在这种情况下没有DateTimeKind。
    • SpecifyKind不是静态方法吗?
    猜你喜欢
    • 1970-01-01
    • 2014-09-29
    • 2015-11-26
    • 2021-01-08
    • 1970-01-01
    • 2021-11-12
    • 2013-03-20
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多