【问题标题】:How can I parse a DateTime that looks like: 'Date(1543396029630)' [duplicate]如何解析看起来像这样的日期时间:'日期(1543396029630)'[重复]
【发布时间】:2019-04-30 22:37:28
【问题描述】:

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

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

我尝试使用在线转换器转换 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系统。

现在,我基本上什么也做不了,只能继续编辑我的问题,而且它们都已得到解答。这太荒谬了!!!

【问题讨论】:

  • 当我把它传到前面时你能举个例子你是怎么把它放在前面的吗?
  • @BagusTesajust 标准 mvc。
  • "dateString": "28/11/2018 23:12:33", 看起来与数据库条目没有任何变化。仔细检查您转换日期的前端代码..如果您不帮助我们提供Minimal, Complete, and Verifiable您的问题示例,这很难提供帮助..或者至少,让我们了解这个前端基于什么...... :(

标签: c# datetime


【解决方案1】:

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

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

您可以像这样在javascript中将其转换为Date

var date = new Date(unix_timestamp_in_milliseconds);

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

  1. DateTime.Kind 实例上的 date 属性,并且
  2. 您的 Json 序列化程序正在使用的设置(例如,如果您使用的是 Json.NET,那么 JsonSerializerSettings.DateTimeZoneHandlingJsonSerializerSettings.DateFormatHandling 属性将是相关的。

请参阅Json.Net documentation,了解它们如何交互的指南。

我个人建议使用 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!
        });

【讨论】:

  • 但是,我的数据库记录是“28/11/2018 22:07:09”,这是否意味着我的数据库记录不正确?
  • 我的困惑是,在我将 Unix 时间刻度转换为 utc 时间并与数据库中的记录进行比较后,它们是不同的。在 C# 中,我使用 DateTime.UtcNow; 生成日期时间。
  • 是的,看起来您的数据库记录可能不是 UTC。要么,要么在转换为unix时间戳之前对其进行操作。您可以使用其他工具来仔细检查您的转化,例如:currentmillis.com
  • 嗨,我刚刚编辑了我的帖子,你能看看我做错了什么吗?
  • @AndySong 我已经更新了答案,提供了一些关于为什么你可能会得到错误值的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 2014-01-29
  • 1970-01-01
相关资源
最近更新 更多