BC的日期是Python

Rog*_*ger 24 python date

我打算用Python构建一个需要广泛处理BC日期的应用程序(在DB中存储和检索,进行计算).大多数日期都会有各种不确定因素,例如"公元前2000年左右".

我知道Python的datetime库只处理1 AD的日期.

到目前为止我只找到了FlexiDate.还有其他选择吗?

编辑:最好的方法可能是将它们存储为字符串(具有String作为基本数据类型)和-as建议 - 有一个自定义日期时间类,可以使它具有一些数字意义.对于大多数人来说,日期只包含一年.有一些有趣的问题需要解决,如"早期的500BC","公元前1600年至公元前1500年","公元前1800年之前".

hob*_*obs 9

天文学家和航空航天工程师必须处理不列颠哥伦比亚省的日期和连续的时间线,因此这是您搜索的谷歌背景.

AstropyTime课程将为你工作(甚至比你希望的更准确和完整).pip install astropy而你正在路上.

如果你自己动手,你应该回顾一下Vallado章节中关于日期的一些公式.将日期从朱利安转换为格里高利等需要很多模糊不清的因素.


cre*_*ser 5

NASA Spice 函数可以很好地处理 BC,可以进行多种格式的转换。在这些示例中begin_date, 和end_date包含与输入日期相对应的 J2000 纪元过去的 TDB 秒数:

import spiceypy as spice

# load a leap second kernel
spicey.furnsh("path/to/leap/second/kernel/naif0012.tls")

begin_date = spice.str2et('13201 B.C. 05-06 00:00')
end_date = spice.str2et('17191 A.D. 03-15 00:00')  
Run Code Online (Sandbox Code Playgroud)

str2et() 的文档输入格式文档以及 Leapsecond 内核文件可通过 NASA Spice 主页获取。

从日期时间或其他时间方法转换为香料很简单:

if indate.year < 0.0:
    spice_indate = str(indate.year) + ' B.C. ' + sindate[-17:]
    spice_indate = str(spice_indate)[1:]
else: 
    spice_indate = str(indate.year) + ' A.D. ' + sindate[-17:]

'2018 B.C. 03-31 19:33:38.44'
Run Code Online (Sandbox Code Playgroud)

其他功能包括:TIMOUT、TPARSE 与 J2000 纪元秒之间的转换。

这些函数可以在Python中通过spiceypy使用,例如通过安装pip3 install spiceypy


小智 4

这是一个有趣的问题,似乎很奇怪这样的类还不存在(re @joel Cornett comment)如果你只工作几年,它会简化你的类来处理整数而不是日历日期 - 你可以使用字典文本描述(公元前10年)和整数值(-10)编辑:我用谷歌搜索了这个:

http://code.activestate.com/lists/python-list/623672/

  • 我接受了您的回答,因为除了您提供的链接和我已经找到的库之外,关于这个主题的可用信息很少。我正准备推出我自己的实施...... (2认同)