如何在Python中从负epoch创建datetime

2024-10-01 15:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

StackExchange上的第一个计时器。在

我正在使用ArcGIS服务器和Python。在尝试使用REST端点对地图服务执行查询时,我在JSON响应中获取了一个字段esriFieldTypeDate的值,该字段为负epoch。 JSON响应如下所示:

    {
  "feature" :
  {
    "attributes" : {
      "OBJECTID" : 11,
      "BASIN" : "North Atlantic",
      "TRACK_DATE" : -3739996800000,
    }
    ,
    "geometry" :
    {
      "paths" :
      [
        [
          [-99.9999999999999, 30.0000000000001],
          [-100.1, 30.5000000000001]
        ]
      ]
    }
  }
}

我所指的字段是上述JSON中的“TRACK_DATE”。ArcGIS服务器返回的值从epoch开始总是以毫秒为单位。ArcGIS服务器还提供了一个HTML响应,同一查询的TRACK_DATE字段显示为“TRACK_DATE:1851/06/27 00:00:00 UTC”。在

所以,日期是1900年以前的,我知道Python内置的datetime模块不能处理1900年之前的日期。我使用的是32位pythonv2.6。我试图用

datetime.datetime.utcfromtimestamp(float(-3739996800000)/1000)

但是,这失败了

^{pr2}$

在Python2.6中,如何处理负的和1900之前的纪元?我也看过类似的帖子,但找不到一篇可以解释使用消极时代的文章。在


Tags: 服务器restjsondatetimedate地图track端点
3条回答
if timestamp < 0:
    return datetime(1970, 1, 1) + timedelta(seconds=timestamp)
else:
    return datetime.utcfromtimestamp(timestamp)

这对我有用:

datetime.datetime(1970, 1, 1) + datetime.timedelta(seconds=(-3739996800000/1000))

datetime.datetime(1851, 6, 27, 0, 0)

在StackOverflow上问这个问题会更好,因为它更特定于Python而不是GIS。在

您可以使用datetime模块的datetimetimedelta函数来实现这一点。在

其他答案将时间戳除以1000,将毫秒转换为秒。这是不必要的,因为timedelta函数可以直接用毫秒作为参数。因此,这样做可能更干净:

datetime.datetime(1970, 1, 1) + datetime.timedelta(milliseconds=-3739996800000)

正如您所期望的那样,datetime.datetime(1851, 6, 27, 0, 0)。在

相关问题 更多 >

    热门问题