JSON ISO日期看似错误的时区

时间:2013-10-17 12:51:09

标签: 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 (GMT Summer Time)
Thu Oct 17 2013 14:23:34 GMT +0100 (GMT Summer Time)

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

item.CreatedDate = DateTime.Now.ToUniversalTime();

/////

var pst = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
date = TimeZoneInfo.ConvertTimeFromUtc(item.CreatedDate, pst),

var json = JsonConvert.SerializeObject(date, Formatting.Indented);

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

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);

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

1 个答案:

答案 0 :(得分:3)

来自MSN关于javascript中的Date.parse

  

本地时区用于解释不包含的参数   时区信息。

<强>更新: 您可以使用Json.NET序列化settings保留时区:

var json = JsonConvert.SerializeObject(date,
    Formatting.Indented,
    new JsonSerializerSettings
    {
        DateTimeZoneHandling = DateTimeZoneHandling.Local
    });

<强> UPDATE2
关于在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())