使用 datetime 在 Python 中确定给定时间戳的季节

新手上路,请多包涵

我想使用日期时间模块(不是时间)从时间戳中仅提取月份和日期,然后根据冬至的固定日期确定它是否属于给定季节(秋季、夏季、冬季、春季)和分点。

例如,如果日期介于 3 月 21 日和 6 月 20 日之间,则为春季。不分年份。我希望它只查看月份和日期,而忽略此计算中的年份。

我一直在使用它时遇到麻烦,因为 没有从我的数据中正确提取月份出于这个原因

原文由 Dan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 703
2 个回答

如果日期介于 3 月 21 日和 6 月 20 日之间,则为春季。不分年份。我希望它只查看月份和日期,而忽略此计算中的年份。

 #!/usr/bin/env python
from datetime import date, datetime

Y = 2000 # dummy leap year to allow input X-02-29 (leap day)
seasons = [('winter', (date(Y,  1,  1),  date(Y,  3, 20))),
           ('spring', (date(Y,  3, 21),  date(Y,  6, 20))),
           ('summer', (date(Y,  6, 21),  date(Y,  9, 22))),
           ('autumn', (date(Y,  9, 23),  date(Y, 12, 20))),
           ('winter', (date(Y, 12, 21),  date(Y, 12, 31)))]

def get_season(now):
    if isinstance(now, datetime):
        now = now.date()
    now = now.replace(year=Y)
    return next(season for season, (start, end) in seasons
                if start <= now <= end)

print(get_season(date.today()))

它是支持任何年份的 @Manuel G 答案 的扩展版本。

原文由 jfs 发布,翻译遵循 CC BY-SA 3.0 许可协议

仅使用年份参数可能更容易。它与您的方法没有太大不同,但可能比幻数更容易理解。

 # get the current day of the year
doy = datetime.today().timetuple().tm_yday

# "day of year" ranges for the northern hemisphere
spring = range(80, 172)
summer = range(172, 264)
fall = range(264, 355)
# winter = everything else

if doy in spring:
  season = 'spring'
elif doy in summer:
  season = 'summer'
elif doy in fall:
  season = 'fall'
else:
  season = 'winter'

原文由 jheddings 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题