【问题标题】:How to parse time like this '\/Date(-62135596800000)\/' with Python如何使用 Python 解析这样的时间 '\/Date(-62135596800000)\/'
【发布时间】:2016-12-30 16:38:20
【问题描述】:

如何使用 Python 解析像这样的时间 '/Date(-62135596800000)/'?

我搜索了互联网,但无法找到解决方案。

链接:http://211.137.19.74:8089/Ajax/GetStationDetailList?cityName=%E6%B2%88%E9%98%B3

时间点:"/日期(-62135596800000)/" 时间应该是2016:12:31:01:00

【问题讨论】:

  • 这个数字应该代表什么日期?我猜可能不是“Unix 时代之前的 62 万亿秒”。
  • @Kevin...这对古生物学家来说很正常!
  • 你能给我们一些关于这个日期字符串来自哪里的上下文吗?
  • 这是一个 ASP.NET JSON 日期(旧式),该值相当于 0001-01-01T00:00:00.000Z(在 .NET 中的 UTC 中为 DateTime.MinValue)。该数字是自 Unix 纪元以来的 毫秒。
  • 没错。 API 响应中的所有值都设置为默认日期0001-01-01 00:00:00.000 UTC。无论出于何种原因,服务器都没有在该字段上发送任何当前日期。

标签: python datetime time


【解决方案1】:

/Date(N)/ 通常是由 .NET 中内置的 WCF JSON 序列化程序序列化的日期格式。然后可以通过在 JavaScript 中调用 new Date(N) 来重构该值。

在 JavaScript 中运行它会显示为什么这个日期很可能是错误的:

new Date(-62135596800000)
// Date 0001-01-01T00:00:00.000Z

如您所见,您获得了0001-01-01 00:00:00.00。这也恰好是 .NET 中空 DateTime 对象的 默认 值:

default(DateTime).ToString("u") // 0001-01-01 00:00:00Z
new DateTime(0).ToString("u") // 0001-01-01 00:00:00Z

所以,很抱歉这样说,但那台服务器刚刚坏了。


话虽如此,一旦你得到一个有效的日期,你就可以在 Python 中使用datetime.fromtimestamp 或datetime.utcfromtimestamp 解析数字:

>>> from datetime import datetime
>>> datetime.fromtimestamp(1483120713887 // 1000)
datetime.datetime(2016, 12, 30, 18, 58, 33)

【讨论】:

  • 负数确实是有效的,而你只是举了一个例子。
  • @MattJohnson 没关系,我错了。对此感到抱歉。
  • 当然,没问题。 :)
  • datetime.utcfromtimestamp 会不会更合适?
  • @poke 太好了。我删除了我的。
【解决方案2】:

使用 python 3.x
看起来像纪元时间(从 1970 年 1 月 1 日 00:00:00.000 GMT 开始的纳秒)。你可以使用这样的东西:

from datetime import datetime
dt = datetime.fromtimestamp(62135596800000 // 1000000000)
print(dt)

至于你得到的值,你不能有一个负的纪元时间戳(-62135596800000 是无效的)。如果 - 表示否定,则可能是另一种时间戳格式。

【讨论】:

  • 毫秒,而不是纳秒,是的 - 你绝对可以有一个负的纪元时间戳。 unix 纪元是1970-01-01T00:00:00Z。你会在 1969 年或更早的时候得到底片。
  • @MattJohnson 哦,对不起,我没有意识到这一点。当我使用负值时,datetime.fromtimestamp 函数会引发错误。原来python由于某种原因默认限制了日期范围。 “这通常被限制在 1970 年到 2038 年之间”——来自docs
  • 有趣...here 是一个解决方案。 ;)
【解决方案3】:

来源:ASP.NET FORUMS

var dateString = "/Date(1526409000000)/".substr(6);
var currentTime = new Date(parseInt(dateString));
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
var date = day + "/" + month + "/" + year;
alert(date);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2013-08-25
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多