首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中将年/月/日转换为年中的日

在Python中将年/月/日转换为年中的日
EN

Stack Overflow用户
提问于 2009-03-06 20:34:32
回答 6查看 183.9K关注 0票数 163

我使用的是datetime模块,即:

代码语言:javascript
复制
>>> import datetime
>>> today = datetime.datetime.now()
>>> print(today)
2009-03-06 13:24:58.857946

我想计算一下一年中的哪一天,考虑到了闰年。今天(2009年3月6日)是2009年的第六十五天。

我看到了两个选择:

  1. 创建一个number_of_days_in_month = [31, 28, ...]数组,确定是否是闰年,并手动汇总天数。

  1. 使用datetime.timedelta进行猜测,然后进行二进制搜索,以确定
    1. >>> YEAR = 2009 >>> DAY_OF_YEAR = 62 >>> d= datetime.date(YEAR,1,1) + datetime.timedelta(DAY_OF_YEAR -YEAR

这两种方法感觉都很笨拙&我有一种直觉,那就是有一种更"Pythonic“的方法来计算一年中的某一天。有什么想法/建议吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-03-08 09:27:24

使用datetime.timetuple()datetime对象转换为time.struct_time对象,然后获取其tm_yday属性:

代码语言:javascript
复制
from datetime import datetime
day_of_year = datetime.now().timetuple().tm_yday  # returns 1 for January 1st
票数 314
EN

Stack Overflow用户

发布于 2009-03-06 20:37:27

您可以将strftime%j format string一起使用

代码语言:javascript
复制
>>> import datetime
>>> today = datetime.datetime.now()
>>> today.strftime('%j')
'065'

但是,如果您希望对此数字进行比较或计算,则必须将其转换为int(),因为strftime()返回一个字符串。如果是这样的话,您最好使用DzinX's answer。

票数 52
EN

Stack Overflow用户

发布于 2012-10-23 22:28:51

对于这个问题,DZinX's answer是一个很好的答案。我发现了这个问题,并在寻找反函数时使用了DZinX's answer:将带有儒略日期的日期转换为日期时间。

我发现这是可行的:

代码语言:javascript
复制
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

或者在数字上:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)

我不确定这里的礼仪,但我认为指向反向功能的指针可能对像我这样的人有用。

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

https://stackoverflow.com/questions/620305

复制
相关文章

相似问题

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