将DateTime转换为JSON DateTime

man*_*noj 8 .net c# json web-services

我有一个返回DateTime字段的WebService.

我得到了一个结果/Date(1379048144000)/但是

我想要1379048144000怎样才能实现这一目标.

[WebMethod]
public DateTime GetServerDate()
{
    return DateTime.Now;
}
Run Code Online (Sandbox Code Playgroud)

通过设置Header Content-Type:application/json; 字符集= UTF-8; 我得到了一个结果/Date(1379048144000)/.

Joe*_*Joe 15

您可以更改WS以使用DateTime的值返回long.要返回的值是自Unix Epoch(01/01/1970)以来的毫秒数.这可以通过以下方式的扩展方法来完成DateTime:

public static class DateTimeExtensions
{
    ...
    private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1);

    public static long ToUnixTime(this DateTime dateTime)
    {
        return (dateTime - UnixEpoch).Ticks / TimeSpan.TicksPerMillisecond;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

您的Web服务方法可能类似于:

public long GetMyDate(...)
{
    DateTime dateTime = ...;
    return dateTime.ToUnixTime();
}
Run Code Online (Sandbox Code Playgroud)


Ben*_*Ben 7

Json.NET:

string date = Newtonsoft.Json.JsonConvert.SerializeObject(DateTime.Now);    
Run Code Online (Sandbox Code Playgroud)


mra*_*dol 5

在客户端,您可以使用此功能向客户显示正确的日期(我在我的项目中使用它):

function parseJsonDate(jsonDate) {
var offset = new Date().getTimezoneOffset() * 60000;
var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);
if (parts[2] == undefined) parts[2] = 0;
if (parts[3] == undefined) parts[3] = 0;
d = new Date(+parts[1] + offset + parts[2] * 3600000 + parts[3] * 60000);
date = d.getDate() + 1;
date = date < 10 ? "0" + date : date;
mon = d.getMonth() + 1;
mon = mon < 10 ? "0" + mon : mon;
year = d.getFullYear();
return (date + "." + mon + "." + year);
};
Run Code Online (Sandbox Code Playgroud)

此函数以格式:dd.mm.yyyy返回正确的日期,但您可以根据需要进行更改.我希望我帮助你.