gpt4 book ai didi

python - 如何将不完整和 BC 维基数据日期转换为时间戳?

转载 作者:行者123 更新时间:2023-11-28 18:14:12 25 4
gpt4 key购买 nike

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

正如您在这里看到的,我不能使用 + - 值,它表示日期在公元或公元前。

此外,我无法使用不完整的日期:

例如 Genghis Khan +1162-00-00T00:00:00Z(缺少日期和月份)

BC 中的日期也不完整:柏拉图 -0427-00-00T00:00:00Z

最佳答案

标准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

关于python - 如何将不完整和 BC 维基数据日期转换为时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49508986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com