擅长:python、mysql、java
<pre><code>import datetime
def iso_to_gregorian(iso_year, iso_week, iso_day):
"Gregorian calendar date for the given ISO year, week and day"
fourth_jan = datetime.date(iso_year, 1, 4)
_, fourth_jan_week, fourth_jan_day = fourth_jan.isocalendar()
return fourth_jan + datetime.timedelta(days=iso_day-fourth_jan_day, weeks=iso_week-fourth_jan_week)
</code></pre>
<p>这是根据@BenJames非常好的回答改编的。你不必知道一年的第一天。你只需要知道一个日期的例子,它肯定是在同一个ISO年,以及该日期的ISO日历周和日。</p>
<p>1月4日只是一个例子,因为正如本所指出的,1月4日总是属于同一个ISO年和公历年,并且是一年中的第一天。</p>
<p>由于周的长度都是相同的,您可以简单地减去所需日期的ISO和您在两种格式中都知道的日期的ISO之间的天数和周数,然后再加上天数和周数。(这些数字是正数还是负数并不重要,所以你可以选择其他“固定日”,比如12月28日。)</p>
<h2>编辑</h2>
<p>我之所以更正这一点,是因为正如@JoSo所指出的,同样属于ISO年的公历年的第一天是1月4日,而不是1月5日。正如解释所说,选择哪一天作为参考点并不重要,但选择1月4日让这个选择变得不那么“神奇”。</p>