Wikidata date format看起来像这样:
+2018-03-26T00:00:00Z
如果道格拉斯亚当斯出生在+1952-03-11T00:00:00Z
然后我可以使用Python来获取这样的时间戳:
from datetime import datetime
from dateutil.parser import parse
datestring = '+1952-03-11T00:00:00Z'
dt_obj = parse(datestring[1:])
print(dt_obj.timestamp())
>>> -562032000.0
正如您在此处所见,我无法使用 + - 值,这表示AD或BC中的日期。
此外,我不能处理不完整的日期:
例如成吉思汗+1162-00-00T00:00:00Z
(缺少日期和月份)
BC省的日期也不完整:柏拉图-0427-00-00T00:00:00Z
答案 0 :(得分:1)
标准datetime
模块无法处理负(BC)日期,但NumPy可以。它允许您解析正日期和负日期,虽然由于某种原因它只允许没有符号符号(假定为正)或负符号;也许值得提出一个问题,如the ISO 8601 standard is supposed to support it。但是,缺少的月份和日期不是(afaik)标准的一部分;您可以将'-00'
拆分为一种有点笨拙但有效的解决方案。完整的功能可能如下所示:
import numpy as np
def get_timestamp(date_str):
# Probably not necessary
date_str = date_str.strip()
# Remove + sign
if date_str[0] == '+':
date_str = date_str[1:]
# Remove missing month/day
date_str = date_str.split('-00', maxsplit=1)[0]
# Parse date
dt = np.datetime64(date_str)
# As Unix timestamp (choose preferred datetype)
return dt.astype('<M8[s]').astype(np.int64)
date1 = '+1952-03-11T00:00:00Z'
date2 = '-0427-00-00T00:00:00Z'
print('Timestamp for {}: {}'.format(date1, get_timestamp(date1)))
# Timestamp for +1952-03-11T00:00:00Z: -562032000
print('Timestamp for {}: {}'.format(date2, get_timestamp(date2)))
# Timestamp for -0427-00-00T00:00:00Z: -75641990400