我在python中有一个字符串"2012.11.07"。我需要将其转换为日期对象,然后获取年份的整数值以及儒略日。是否有可能?

最佳答案

首先,您可以将其转换为 datetime.datetime 对象,如下所示:

>>> import datetime
>>> fmt = '%Y.%m.%d'
>>> s = '2012.11.07'
>>> dt = datetime.datetime.strptime(s, fmt)
>>> dt
datetime.datetime(2012, 11, 7, 0, 0)

然后,您可以使用datetime上的方法来获取所需的内容……只是datetime没有直接提供所需的功能,因此您需要转换为time tuple
>>> tt = dt.timetuple()
>>> tt.tm_yday
312

术语“朱利安日”有几个不同的含义。如果您正在寻找2012312,则必须间接执行此操作,例如,以下操作之一。
>>> int('%d%03d' % (tt.tm_year, tt.tm_yday))
2012312
>>> tt.tm_year * 1000 + tt.tm_yday
2012312

如果您正在寻找其他含义,则应该可以从这里弄清楚。例如,如果您想要“自4713年1月1日起的天数”的含义,并且您有一个要求使用公历年份和年份的公式,则可以在上面插入这两个值。(如果您有一个公式需要公历的年,月和日,您甚至不需要timetuple步骤。)如果您无法确定从那里去哪里,请询问更多详细信息。

如果您没有公式,甚至可能已经有了公式,那么最好的办法就是在PyPI和ActiveState周围查找预先存在的模块。例如,快速搜索打开了一个名为 jdcal 的东西。我以前从未看过它,但是快速的pip install jdcal和对自述文件的简要浏览就可以实现:
>>> sum(jdcal.gcal2jd(dt.year, dt.month, dt.day))
2456238.5

这与USN Julian date converter给我的结果相同。

如果您想要整数儒略日,而不是分数儒略日,则必须决定要舍入的方向-朝0,朝负无穷大,将正午舍入到第二天,将正午舍入到偶数天,等等。(请注意,朱利安日期的定义是从4713BC年1月1日中午开始,所以2012年11月7日的一半是2456238,另一半是2456239,只有您知道您想要哪个……例如,朝0舍入:
>>> int(sum(jdcal.gcal2jd(dt.year, dt.month, dt.day)))
2456238

关于python - 从字符串日期中提取年份和儒略日,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13943062/

10-12 22:43