我正在着手用Python构建一个应用程序,它需要广泛地处理BC日期(在DB中存储和检索,进行计算)。大多数日期都是不确定的,比如“公元前2000年左右”。
我知道Python的datetime库只处理公元1年的日期。
到目前为止我只找到了FlexiDate。还有没有别的选择?
datetime编辑:最好的方法可能是将它们存储为字符串(将字符串作为基本数据类型)和-as建议-有一个自定义的datetime类,可以对其进行一些数字意义上的理解。对于大多数人来说,日期看起来只有一年。有一些有趣的问题需要解决,比如“公元前500年早期”,“公元前1600年到公元前1500年”,“公元前1800年前”。
发布于 2013-04-07 16:33:06
这是一个有趣的问题,这样的类还不存在似乎很奇怪(re @joel Cornett comment)如果你只在年份工作,它会简化你的类来处理整数而不是日历日期-你可以使用一个字典,其中包含文本描述(公元前10年)和整数值(-10)编辑:我谷歌了一下:
发布于 2013-11-09 06:43:08
天文学家和航空航天工程师必须处理公元前的日期和连续的时间线,所以这就是你搜索的谷歌上下文。
Astropy的Time
类将为您工作(甚至比您期望的更精确、更完整)。pip install astropy
,您就可以上路了。
如果您使用自己的公式,则应该复习Vallado's chapter on dates中的一些公式。要将日期从朱利安转换为公历等,需要使用许多模糊的因子。
发布于 2018-04-01 08:25:55
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')
Documentation of str2et()、Input format documentation以及Leapsecond kernel files都可以通过美国宇航局的Spice主页获得。
将datetime或其他时间方法转换为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'
其他功能包括: TIMOUT,TPARSE都可以转换为J2000纪元秒。
这些函数在python中通过spiceypy提供,例如通过pip3 install spiceypy
安装
https://stackoverflow.com/questions/15857797
复制相似问题