DataContractJsonSerializer更改我的日期

时间:2010-09-01 15:00:32

标签: c# .net ajax json

用户在表单中输入日期,但是当我通过AJAX json调用传递日期时,我的日期会被DataContractJsonSerializer更改。

这是我的AJAX电话:

function Save()
{
    //Convert date to milliseconds from from 1/1/1970 - necessary for passing a date through JSON
    var d = "09/01/2010 05:00";
    myDate = new Date(d);
    myTicks = myDate.getTime();

    var message = 
    {
        MessageID: $("#MessageID").val(),
        MessageDate: '\/Date(' + myTicks + ')\/',
    };

    $.ajax({
        url: "<%= Url.Action("SaveMessage") %>",
        type: "POST",
        dataType: "json",
        data: $.toJSON(message),
        contentType: "application/json; charset=utf-8",
        success: function(result)
        {
            if (result && result.success)
            {
                //
            }
        }
    }); 
}

这是我的序列化代码:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if ((filterContext.HttpContext.Request.ContentType ?? string.Empty).Contains("application/json"))
    {
        var serializer = new DataContractJsonSerializer(RootType);

        filterContext.ActionParameters[Param] = serializer.ReadObject(filterContext.HttpContext.Request.InputStream);
    }
}

它将我的约会时间改为GMT。因此,如果用户输入“09/01/2010 05:00”,则在序列化后,它将显示为“09/01/2010 09:00”。

我能够通过使用下面的函数在我的本地环境中解决这个问题,但它在生产中不起作用。在我的本地环境中,服务器时间设置为EST(上午11:00)。生产时,服务器时间设置为GMT(下午3:00)。

这是我的转换功能:

public DateTime ConvertToLocal(DateTime dt)
{
    int hours = TimeZoneInfo.Local.GetUtcOffset(dt).Hours;

    DateTime dtGMT = dt.AddHours(Convert.ToDouble(hours));

    return dtGMT;
}

这将在我的本地环境中将我的日期从“09/01/2010 09:00 AM”正确更改回“09/01/2010 05:00 AM”,但在生产时它保持为“09/01 / 2010 09:00 AM“。

似乎在生产中,DataContractJsonSerializer意识到我正在从EST浏览,因此它增加了4个小时。但由于我的生产服务器是GMT,我的ConvertToLocal不起作用,该函数中的时区偏移量为0而不是-4。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:5)

您可能希望使用myTicks = myDate.getTime();

,而不是使用myTicks = myDate.UTC();

getTime()使用本地时间(基于浏览器运行的时区)。 UTC()也给你自1970年1月1日以来的毫秒数,但它是1970年1月1日UTC而不是当地时间。 Microsoft的JSON序列化日期使用UTC度量。

然后您不需要进行任何服务器端转换。

相关问题