首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中的BC日期

Python中的BC日期
EN

Stack Overflow用户
提问于 2013-04-07 09:09:25
回答 4查看 7.5K关注 0票数 28

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

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

到目前为止我只找到了FlexiDate。还有没有别的选择?

datetime编辑:最好的方法可能是将它们存储为字符串(将字符串作为基本数据类型)和-as建议-有一个自定义的datetime类,可以对其进行一些数字意义上的理解。对于大多数人来说,日期看起来只有一年。有一些有趣的问题需要解决,比如“公元前500年早期”,“公元前1600年到公元前1500年”,“公元前1800年前”。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-07 16:33:06

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

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

票数 4
EN

Stack Overflow用户

发布于 2013-11-09 06:43:08

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

AstropyTime类将为您工作(甚至比您期望的更精确、更完整)。pip install astropy,您就可以上路了。

如果您使用自己的公式,则应该复习Vallado's chapter on dates中的一些公式。要将日期从朱利安转换为公历等,需要使用许多模糊的因子。

票数 10
EN

Stack Overflow用户

发布于 2018-04-01 08:25:55

NASA的Spice函数非常好地处理了BC与多种格式的转换。在这些示例中,begin_dateend_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安装

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15857797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档