C# JSON ISO日期与看似错误的时区
我有以下ISO日期:C# JSON ISO日期与看似错误的时区,c#,javascript,asp.net,json,json.net,C#,Javascript,Asp.net,Json,Json.net,我有以下ISO日期: (UTC) 2013-10-17T05:23:34.387 (PST) 2013-10-17T05:23:34.387-08:00 我想在PST中显示日期。(08:00是从UTC到PST的偏移) 当我使用: alert(new Date('2013-10-17T05:23:34.387')) alert(new Date('2013-10-17T05:23:34.387-08:00')) 我得到: Thu Oct 17 2013 06:23:34 GMT +0100 (
(UTC) 2013-10-17T05:23:34.387
(PST) 2013-10-17T05:23:34.387-08:00
我想在PST中显示日期。(08:00是从UTC到PST的偏移)
当我使用:
alert(new Date('2013-10-17T05:23:34.387'))
alert(new Date('2013-10-17T05:23:34.387-08:00'))
我得到:
Thu Oct 17 2013 06:23:34 GMT +0100 (GMT Summer Time)
Thu Oct 17 2013 14:23:34 GMT +0100 (GMT Summer Time)
不带偏移量的ISO日期来自以下C#(针对此问题进行了适当编辑):
带有偏移量的ISO日期来自以下C#(针对该问题进行了适当编辑):
我的问题是,如何在JSON中维护时区信息,并在浏览器中将日期显示为PST?来自aboutdate.parse
在javascript中:
本地时区用于解释不包含
时区信息
更新:
您可以使用Json.NET序列化保留时区:
更新2:关于javascript中的显示。
是的,它保持偏移量,但当它将日期转换为字符串时,它使用本地时区。 请尝试以下方法:
alert(new Date('2013-10-17T05:23:34.387-08:00').toGMTString())
alert(new Date('2013-10-17T05:23:34.387-08:00').toUTCString())
“这个日期应该是PST”-你怎么期望仅仅从数据中就知道这些?该值根本没有指定它。您刚刚给它一个本地日期/时间,没有UTC偏移。它恰好是在太平洋时间计算的(顺便说一句,实际上不是PST,它是PDT),但是你已经把它转换成一个值,这个值删除了这些信息。考虑到你已经给出了一个“本地”值,当你提醒它时,它会解释为在你的客户本地时区。我想可能是这样的。更新的问题(PDT,谢谢:)我怀疑您实际上并不想要完整的时区-我怀疑您想要一个带有UTC偏移量的日期/时间。尝试使用DateTimeOffset而不是DateTime。哦,如果您真的需要DateTime,请使用DateTime.UtcNow而不是DateTime.Now.ToUniversalTime()。但不清楚您的其余代码中有多少需要更改以使用DateTimeOffset。哦,并考虑使用野田佳彦;我怀疑有多少代码。此日期用简单的控制器方法格式化。现在查看
DateTimeOffset
和Noda Time
这将保持偏移量,但在浏览器中仍被解释为BST。也许这更像是一个JS问题?新日期('2013-10-17T05:23:34.387')。ToutString()是门票,谢谢!(由于返回的时间已经是PST时间,因此您将注意到没有偏移)
item.CreatedDate = DateTime.Now.ToUniversalTime();
/////
var pst = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var offset = pst.BaseUtcOffset;
date = new DateTimeOffset(TimeZoneInfo.ConvertTimeFromUtc(item.CreatedDate, pst), offset);
var json = JsonConvert.SerializeObject(date, Formatting.Indented);
var json = JsonConvert.SerializeObject(date,
Formatting.Indented,
new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Local
});
alert(new Date('2013-10-17T05:23:34.387-08:00').toGMTString())
alert(new Date('2013-10-17T05:23:34.387-08:00').toUTCString())