Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JSON ISO日期与看似错误的时区_C#_Javascript_Asp.net_Json_Json.net - Fatal编程技术网

C# JSON 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 (

我有以下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 (GMT Summer Time)
Thu Oct 17 2013 14:23:34 GMT +0100 (GMT Summer Time)
不带偏移量的ISO日期来自以下C#(针对此问题进行了适当编辑):

带有偏移量的ISO日期来自以下C#(针对该问题进行了适当编辑):

我的问题是,如何在JSON中维护时区信息,并在浏览器中将日期显示为PST?

来自about
date.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())