将日期时间转换为 JSON 日期时间

Posted

技术标签:

【中文标题】将日期时间转换为 JSON 日期时间【英文标题】:Convert DateTime To JSON DateTime 【发布时间】:2013-09-20 04:22:57 【问题描述】:

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

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

我只想要1379048144000 我怎样才能做到这一点。

[WebMethod]
public DateTime GetServerDate()

    return DateTime.Now;

通过设置Header Content-Type: application/json;字符集=utf-8;我得到了类似/Date(1379048144000)/ 的结果。

【问题讨论】:

【参考方案1】:

您可以更改您的 WS 以返回带有 DateTime 值的 long。返回的值是自 Unix 纪元 (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;
    
    ...

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

public long GetMyDate(...)

    DateTime dateTime = ...;
    return dateTime.ToUnixTime();

【讨论】:

以下是 .NET 源代码如何设置纪元时间:new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc),这可能更准确。参考:referencesource.microsoft.com/#System.Data.Services/System/Data/…【参考方案2】:

Json.NET:

string date = Newtonsoft.Json.JsonConvert.SerializeObject(DateTime.Now);    

【讨论】:

【参考方案3】:

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

function parseJsonDate(jsonDate) 
var offset = new Date().getTimezoneOffset() * 60000;
var parts = /\/Date\((-?\d+)([+-]\d2)?(\d2)?.*/.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);
;

这个函数是返回正确的日期格式:dd.mm.yyyy,但是如果你需要,你可以改变它。希望能帮到你。

【讨论】:

我相信你应该改变:date = d.getDate() + 1;至:日期 = d.getDate(); 我得到的日期为:“\/Date(1476775277500)\/”。这个解决方案也对我有用,谢谢! , 能够转换为正确的 js 日期【参考方案4】:

在将 JSON 对象中的日期发送到 JS 时,您总是可以通过如下转换日期来解决您的问题:

var myJSDate = (new Date(parseInt(obj.MyDate.substr(6)))).toJSON();

其中 obj.Date 包含您要格式化的日期。

然后你会得到这样的东西:“2013-10-25T18:04:17.289Z”

你可以随时在 Chrome 控制台中检查它:

(new Date()).toJSON();

希望这会有所帮助!

【讨论】:

【参考方案5】:

只需像这样编写,即可将您的日期字符串转换为 JSON 格式。

date = "" + date + "";

【讨论】:

【参考方案6】:

有两种解决方案:

    客户端:

function TojavascriptDate(value) 
  var pattern = /Date\(([^)]+)\)/;
  var results = pattern.exec(value);
  var dt = new Date(parseFloat(results[1]));
  return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();

也可能需要转换成数据对象 var date = new Date(xxx)

    服务器端:

    Newtonsoft.Json.JsonConvert.SerializeObject(your_object)
    

【讨论】:

【参考方案7】:

尝试正则表达式:

var jsonDate = @"/Date(1379048144000)/"; 
var regex = /-?\d+/; 
var jsonDate = re.exec(jsonDate); 
var dateOriginal = new Date(parseInt(m[0]));

【讨论】:

我正在返回 DateTime 并且返回为 /Date(1379048144000)/ 我在该 c# 代码中没有'/Date(1379048144000)/' 它只是在通过 json post 调用时响应 那么你想在哪里解析? javascript?服务器端? 我只想通过服务器端c#返回1379048144000

以上是关于将日期时间转换为 JSON 日期时间的主要内容,如果未能解决你的问题,请参考以下文章

如何将 .NET 日期时间转换为 JSON

将 JSON 时间戳字符串转换为 pandas 数据框中的 python 日期

将 JSON 纪元时间转换为本地人类可读日期

json中的String类型的日期为啥自动转换成date类型

将 Json 日期字符串转换为 JavaScript 日期对象

将json结果转换为日期[重复]