找到datetime.isocalendar()逆函数的最佳方法是什么?

找到datetime.isocalendar()逆函数的最佳方法是什么?,第1张

找到datetime.isocalendar()逆函数的最佳方法是什么?

Python
3.8添加了fromisocalendar()方法:

>>> datetime.fromisocalendar(2011, 22, 1)datetime.datetime(2011, 5, 30, 0, 0)

Python的3.6添加

%G
%V
%u
指示:

>>> datetime.strptime('2011 22 1', '%G %V %u')datetime.datetime(2011, 5, 30, 0, 0)

原始答案

我最近不得不自己解决此问题,并提出了以下解决方案:

import datetimedef iso_year_start(iso_year):    "The gregorian calendar date of the first day of the given ISO year"    fourth_jan = datetime.date(iso_year, 1, 4)    delta = datetime.timedelta(fourth_jan.isoweekday()-1)    return fourth_jan - deltadef iso_to_gregorian(iso_year, iso_week, iso_day):    "Gregorian calendar date for the given ISO year, week and day"    year_start = iso_year_start(iso_year)    return year_start + datetime.timedelta(days=iso_day-1, weeks=iso_week-1)

一些测试用例:

>>> iso = datetime.date(2005, 1, 1).isocalendar()>>> iso(2004, 53, 6)>>> iso_to_gregorian(*iso)datetime.date(2005, 1, 1)>>> iso = datetime.date(2010, 1, 4).isocalendar()    >>> iso(2010, 1, 1)>>> iso_to_gregorian(*iso)datetime.date(2010, 1, 4)>>> iso = datetime.date(2010, 1, 3).isocalendar()>>> iso(2009, 53, 7)>>> iso_to_gregorian(*iso)datetime.date(2010, 1, 3)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5649517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存