Python 如何将不完整和不完整的数据日期转换为时间戳?

Python 如何将不完整和不完整的数据日期转换为时间戳?,python,python-3.x,date,datetime,Python,Python 3.x,Date,Datetime,下面的示例如下所示: 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

下面的示例如下所示:

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
+2018-03-26T00:00:00Z
如果道格拉斯·亚当斯出生于1952-03-11T00:00:00Z

然后我可以使用Python获得如下时间戳:

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
从日期时间导入日期时间
从dateutil.parser导入解析
datestring='+1952-03-11T00:00:00Z'
dt_obj=parse(日期字符串[1:])
打印(dt_obj.timestamp())
>-562032000.0

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

此外,我不能在日期不完整的情况下工作:

例如成吉思汗
+1162-00-00T00:00:00Z
(缺少日期和月份)

BC中的日期也不完整:柏拉图
-0427-00-00T00:00:00Z
标准模块不能处理负数(BC)日期,但可以。它允许您解析正数和负数日期,尽管出于某种原因,它只允许不使用符号(假定为正数)或负数符号;也许值得提出一个问题,比如。然而,缺少的月份和天数不是标准的一部分;您可以通过
'-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
将numpy导入为np
def get_时间戳(日期):
#可能没有必要
date_str=date_str.strip()
#删除+符号
如果日期[0]='+':
date_str=date_str[1:]
#删除丢失的月/日
日期分割=日期分割('-00',maxsplit=1)[0]
#解析日期
dt=np.datetime64(日期)
#作为Unix时间戳(选择首选日期类型)

return dt.astype('相关问题:。也可以查看,他们建议使用or(与之不同,令人困惑地是)代替标准对象。关于已签名的正日期打开。谢谢,这正是我所寻找的。现在已修复,我想修复将适用于v1.14.3/v1.15。