【问题标题】:Display local time from utc time stored in sql database on asp.net app从存储在 asp.net 应用程序的 sql 数据库中的 UTC 时间显示本地时间
【发布时间】:2011-01-16 20:21:43
【问题描述】:

我有时间以 utc 格式保存在 sql 数据库中。我在 gridview 上显示这些时间,但它们仍然是 UTC 格式。我想将它们转换为本地时间的客户端浏览器。问题是,虽然我可以获得仅适用于当前日期/时间的时区偏移量。如果未来的某些日期最终发生在夏令时期间,则该偏移量可能会发生变化。我对 Web 编程比较陌生,但似乎我需要做的是运行一些 Javascript,因为每个条目都绑定到 gridview,它以某种方式获取 C# datetimeoffset 对象并将其转换为本地时间。或者那是不可能的?

【问题讨论】:

    标签: asp.net javascript utc


    【解决方案1】:

    这里有两种转换方式。

    方式 #1:如果您的日期时间为自纪元以来的秒数格式,则只需使用以下内容:

     var d=new Date(seconds_since_epoch);
     document.write(d.toString());
    

    方式 #2:如果您只有 UTC 时间的年、月、日、小时、分钟和秒,请使用:

     var d=new Date(yyyy,mo-1,dd,hh,mi,ss); // in JavaScript, January is month 0
     document.write(d.toString());
    

    【讨论】:

      【解决方案2】:

      我在“Indiana Daylight Savings Time”上找到了以下内容: http://www.timetemperature.com/tzus/indiana_time_zone.shtml

      截至目前,2010 年 1 月 18 日,微软系统库调用 TimeZoneInfo.ConvertTimeFromUtc 似乎反映了这种行为,正在检查..

      【讨论】:

        【解决方案3】:

        如果你有一个TimeZoneInfo 对象,这可以在服务器端完成。您可以使用静态ConvertTimeFromUtc() 方法。

        在 C# 中:

        DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(myDbDateTime, myTimeZoneInfo);
        

        如果您在服务器端没有时区,事情会变得很棘手,因为 javascript 不提供客户端的时区(除非它们在美国,即使在某些浏览器上也是如此)。在这种情况下,最好强制用户选择他们当前的时区并将其存储在他们的帐户中。如果这是向匿名用户显示的,您可能应该默认以 UTC 显示,并提供一个选项来为选定的时区刷新它。

        更新

        在尝试自动确定用户的时区时会出现几个问题。

        1. 用户代理未向服务器提供时区。
        2. Javascript 不提供对时区的访问(有时在某些浏览器中除外)。

        javascript 函数getTimezoneOffset() 最初可能听起来不错,但由于存在多个具有相同偏移量的时区,因此这不是唯一值。许多这些非独特区域之间的区别在于它们对夏令时的实施。

        示例:印第安纳州不考虑夏令时。因此,半年的偏移量与东部时间一致,而另一半的偏移量与中部时间相同。

        但是,如果您的用户群主要位于美国并使用 IE、Chrome、Safari 或 Firefox,则您可以在 Date 对象上使用 toString() 方法来获取时区。这些浏览器以不同的方式将时区附加到日期字符串。在美国以外的地区,并非所有浏览器都包含时区(尽管有些浏览器可能仍会显示)。

        打开http://jsbin.com/onulo3 观察:
        IE8:2010 年 2 月 14 日星期日 22:12:22 EST 2010
        Chrome: 2010 年 2 月 14 日星期日 22:12:22 GMT-0500(东部标准时间)
        Safari: 2010 年 2 月 14 日星期日 22:12:22 GMT-0500(东部标准时间)
        Firefox: 2010 年 2 月 14 日星期日 22:12:22 GMT-0500(东部标准时间)

        通过一些解析,您现在可以确定所有美国用户的时区。对于其他所有人,您可以以 UTC 显示时间(并附上相关通知)。

        【讨论】:

        • 我希望用户不需要指定时区,我可以从他们的浏览器中获取时区
        • 我们花了很多时间在最近的一个项目中总结出类似的东西。我会在我的答案中添加细节,但简短的版本是:它不能可靠地完成。
        猜你喜欢
        • 2020-10-10
        • 1970-01-01
        • 2013-10-07
        • 2015-03-19
        • 2019-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-10
        相关资源
        最近更新 更多