我使用的是datetime
模块,即:
>>> import datetime
>>> today = datetime.datetime.now()
>>> print(today)
2009-03-06 13:24:58.857946
我想计算一下一年中的哪一天,考虑到了闰年。今天(2009年3月6日)是2009年的第六十五天。
我看到了两个选择:
number_of_days_in_month = [31, 28, ...]
数组,确定是否是闰年,并手动汇总天数。datetime.timedelta
进行猜测,然后进行二进制搜索,以确定这两种方法感觉都很笨拙&我有一种直觉,那就是有一种更"Pythonic“的方法来计算一年中的某一天。有什么想法/建议吗?
发布于 2009-03-08 09:27:24
使用datetime.timetuple()
将datetime
对象转换为time.struct_time
对象,然后获取其tm_yday
属性:
from datetime import datetime
day_of_year = datetime.now().timetuple().tm_yday # returns 1 for January 1st
发布于 2009-03-06 20:37:27
您可以将strftime
与%j
format string一起使用
>>> import datetime
>>> today = datetime.datetime.now()
>>> today.strftime('%j')
'065'
但是,如果您希望对此数字进行比较或计算,则必须将其转换为int()
,因为strftime()
返回一个字符串。如果是这样的话,您最好使用DzinX's answer。
发布于 2012-10-23 22:28:51
对于这个问题,DZinX's answer是一个很好的答案。我发现了这个问题,并在寻找反函数时使用了DZinX's answer:将带有儒略日期的日期转换为日期时间。
我发现这是可行的:
import datetime
datetime.datetime.strptime('1936-077T13:14:15','%Y-%jT%H:%M:%S')
>>>> datetime.datetime(1936, 3, 17, 13, 14, 15)
datetime.datetime.strptime('1936-077T13:14:15','%Y-%jT%H:%M:%S').timetuple().tm_yday
>>>> 77
或者在数字上:
import datetime
year,julian = [1936,77]
datetime.datetime(year, 1, 1)+datetime.timedelta(days=julian -1)
>>>> datetime.datetime(1936, 3, 17, 0, 0)
或者使用在某些域中流行的基于小数1的jdate:
jdate_frac = (datetime.datetime(1936, 3, 17, 13, 14, 15)-datetime.datetime(1936, 1, 1)).total_seconds()/86400+1
display(jdate_frac)
>>>> 77.5515625
year,julian = [1936,jdate_frac]
display(datetime.datetime(year, 1, 1)+datetime.timedelta(days=julian -1))
>>>> datetime.datetime(1936, 3, 17, 13, 14, 15)
我不确定这里的礼仪,但我认为指向反向功能的指针可能对像我这样的人有用。
https://stackoverflow.com/questions/620305
复制相似问题