显示存储在asp.net app上的sql数据库中的utc时间的本地时间

时间:2010-02-15 02:12:46

标签: asp.net javascript utc

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

3 个答案:

答案 0 :(得分:8)

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

在C#中:

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

如果你在服务器端没有时区,那么事情变得棘手,因为javascript不提供客户端的时区(除非它们在美国,甚至只在某些浏览器上)。在这种情况下,最好强制用户选择他们当前的时区并将其存储在他们的帐户中。如果向匿名用户显示此内容,则默认情况下应显示为UTC,并提供一个选项以针对选定的时区刷新它。

<强>更新

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

  1. 用户代理未向服务器提供时区。
  2. Javascript不提供对时区的访问(有时在某些浏览器中除外)。
  3. javascript函数getTimezoneOffset()最初可能听起来不错,但由于有多个时区具有相同的偏移量,因此这不是唯一值。许多这些非独特区域之间的区别在于它们实现了夏令时。

      

    示例:Indiana不认为DST。因此,半年的偏移量与东部时间相匹配,而另一半的偏移量等于中心时间。

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

      

    打开http://jsbin.com/onulo3观察:
       IE8: Sun Feb 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显示时间(并注意到这一点)。

答案 1 :(得分:1)

我在“印第安纳州夏令时”中找到了以下内容: http://www.timetemperature.com/tzus/indiana_time_zone.shtml

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

答案 2 :(得分:-2)

以下是两种转换方式。

方式#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());