首页 > 解决方案 > 如何解析看起来像这样的 DateTime:'Date(1543396029630)'

问题描述

我在服务器上保存 UTC 时间,当我将它传递到前端时,它给了我这样的信息:"/Date(1543396029630)/"

我的问题是:这是intUTC 时间戳吗?

我尝试使用在线转换器转换 int,但结果与我在数据库中的记录不同。

我的数据库记录是"28/11/2018 23:12:33"

public ActionResult test()
{
    var date = _context.Batches.FirstOrDefault(c => c.Batches_BatchID == 1)
        .Batches_ClosedDate;

    var dateString = _context.Batches.FirstOrDefault(c => c.Batches_BatchID == 1)
        .Batches_ClosedDate.ToString();

    return Json(new
        {
            dateString,
            date,
        }, JsonRequestBehavior.AllowGet);
}

结果是:

{
"dateString": "28/11/2018 23:12:33",
"date": "/Date(1543399953230)/"
}

我去了一个在线转换器,它给我的日期有什么不同的dateString想法吗?

我的帐户被一些反对票问题阻止了,有趣的是我必须重新编辑它们,即使我已经有了接受的答案。我不明白这样做有什么意义。我对这个 stackoverflow 系统感到非常沮丧.

现在,我基本上什么都做不了,只能继续编辑我的问题,而且他们都已经得到了回答。这是荒唐的 !!!

标签: c#datetime

解决方案


1543396029630是 Unix 时间毫秒格式表示:

UTC 时间 2018 年 11 月 28 日星期三 09:07:09

您可以将其转换为Datejavascript 中的一个,如下所示:

var date = new Date(unix_timestamp_in_milliseconds);

由于您的时间与预期不同,因此可能会发生很多事情,与:

  1. DateTime.Kinddate实例上的属性,以及
  2. 您的 Json 序列化程序正在使用的设置(例如,如果您使用的是 Json.NET,则JsonSerializerSettings.DateTimeZoneHandlingandJsonSerializerSettings.DateFormatHandling属性将是相关的。

有关它们如何交互的指南,请参阅 Json.Net 文档。

我个人建议使用 ISO-8601 格式格式化您的日期时间,并将其解析到Date()您的前端代码中。您可以通过在您自己的代码中显式格式化字符串或配置您的 Json 序列化程序以自动执行此操作来实现此目的。

如果您使用的是默认的 Json.Net 序列化程序(在 ASP.NET 核心中),那么您将在您的类中使用类似这样的东西来配置序列化Startup程序(未经测试 - 只是为了给您一个想法):

services.AddMvc()
    .AddJsonOptions(opt =>
        {
            opt.SerializerSettings.DateFormatHandling =
                DateFormatHandling.IsoDateFormat;
            opt.SerializerSettings.DateTimeZoneHandling =
                DateTimeZoneHandling.Unspecified
           // Or maybe DateTimeZoneHandling.Utc - you should test!
        });

推荐阅读