StackExchange上的第一个计时器.
我正在使用ArcGIS Server和Python.在尝试使用REST端点执行查询到地图服务时,我在JSON响应中获取esriFieldTypeDate字段的值为负时期.JSON响应如下所示:
{
"feature" :
{
"attributes" : {
"OBJECTID" : 11,
"BASIN" : "North Atlantic",
"TRACK_DATE" : -3739996800000,
}
,
"geometry" :
{
"paths" :
[
[
[-99.9999999999999, 30.0000000000001],
[-100.1, 30.5000000000001]
]
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我所指的字段是上面JSON中的"TRACK_DATE".自epoch以来,ArcGIS Server返回的值始终以毫秒为单位.ArcGIS Server还提供HTML响应,同一查询的TRACK_DATE字段显示为"TRACK_DATE:1851/06/27 00:00:00 UTC".
因此,日期是在1900年之前,我理解Python内置的datetime模块无法处理1900年之前的日期.我使用的是32位Python v2.6.我试图通过使用将其转换为日期时间
datetime.datetime.utcfromtimestamp(float(-3739996800000)/1000)
然而,这失败了
ValueError: timestamp out of range for platform localtime()/gmtime() function
Run Code Online (Sandbox Code Playgroud)
如何在Python 2.6中使用负面和1900年前的时代?我看过类似的帖子,但找不到解释使用负面时代的帖子.
小智 10
这对我有用:
datetime.datetime(1970, 1, 1) + datetime.timedelta(seconds=(-3739996800000/1000))
Run Code Online (Sandbox Code Playgroud)
→ datetime.datetime(1851, 6, 27, 0, 0)
这可以在StackOverflow上得到更好的要求,因为它比特定于GIS的Python更具体.
if timestamp < 0:
return datetime(1970, 1, 1) + timedelta(seconds=timestamp)
else:
return datetime.utcfromtimestamp(timestamp)
Run Code Online (Sandbox Code Playgroud)