我"2012.11.07"在python中有一个字符串。我需要将其转换为date对象,然后获取 year 以及 Julian day 的整数值。可能吗?
"2012.11.07"
首先,您可以将其转换为这样的datetime.datetime对象:
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没有直接所需的功能之外,因此您需要转换为时间元组
datetime
>>> tt = dt.timetuple() >>> tt.tm_yday 312
术语“朱利安日”具有几个不同的含义。如果要查找2012312,则必须间接执行此操作,例如,以下一项。
2012312
>>> int('%d%03d' % (tt.tm_year, tt.tm_yday)) 2012312 >>> tt.tm_year * 1000 + tt.tm_yday 2012312
如果您正在寻找不同的含义,那么应该可以从这里弄清楚。例如,如果您想要“自4713年1月1日起的天数”的含义,并且您有一个要求使用公历年份和年份的公式,则可以在上面插入这两个值。(如果您有一个公式需要格里高利历年,月和日,您甚至不需要执行该timetuple步骤。)如果您无法确定从那里去哪里,请询问更多详细信息。
timetuple
如果您没有公式,甚至可能已经有了公式,那么最好的办法就是在PyPI和ActiveState周围查找预先存在的模块。例如,快速搜索出现了一个名为的东西jdcal。我以前从未见过它,但是可以快速pip install jdcal简短地阅读自述文件,并且能够做到这一点:
jdcal
pip install jdcal
>>> sum(jdcal.gcal2jd(dt.year, dt.month, dt.day)) 2456238.5
这与USN朱利安日期转换器给我的结果相同。
如果您想要整数儒略日,而不是分数儒略日,则必须决定要舍入的方向-朝0,朝负无穷大,将正午舍入到第二天,将正午舍入到偶数天,等等。(请注意,朱利安日期的定义是从4713BC年1月1日中午开始,所以2012年11月7日的一半是2456238,另一半是2456239,只有您知道您想要哪个……例如,朝0舍入:
>>> int(sum(jdcal.gcal2jd(dt.year, dt.month, dt.day))) 2456238