我在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/