Python中的BC日期

2024-06-02 07:38:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我打算用Python构建一个应用程序,它需要广泛地处理BC日期(在DB中存储和检索,进行计算)。大多数日期都有各种各样的不确定性,比如“公元前2000年左右”。在

我知道Python的datetime库只处理公元1年的日期

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

编辑:最好的方法可能是将它们存储为字符串(基本数据类型为String),并且——正如建议的那样——有一个自定义的datetime类,它可以对它进行一些数值处理。对大多数人来说,日期似乎只有一年。有一些有趣的问题需要解决,如“公元前500年早期”、“公元前1600年至1500年之间”、“公元前1800年以前”。在


Tags: 方法字符串应用程序编辑dbdatetimestring建议
3条回答

天文学家和航空航天工程师必须处理BC日期和一条连续的时间线,所以这就是谷歌搜索的上下文。在

Astropy^{}类将为您工作(甚至比您希望的更加精确和完整)。pip install astropy你就在路上了。在

如果你自己掷骰子,你应该复习一下Vallado's chapter on dates中的一些公式。有很多模糊的因素需要转换日期从朱利安到格里高利等

NASA Spice函数可以非常好地处理BC,并且可以从多种格式进行转换。在这些示例中,begin_dateend_date包含与输入日期相对应的超过J2000 epoch的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')  

Documentation of str2et()Input format documentation,以及 Leapsecond kernel files可通过NASA Spice主页获得。在

从datetime或其他时间方法转换为spice很简单:

^{pr2}$

其他功能包括:TIMOUT,TPARSE转换到和从J2000 epoch秒。在

这些函数在python中通过spiceypy提供,例如通过pip3 install spiceypy安装

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

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

相关问题 更多 >