有没有办法根据周数自动输出日期?
更准确地说:我输入特定年份的周数,输出是从星期一到星期日的日期?
有几种创建日历的软件包,但似乎都不支持。有人有什么好的建议吗?
(Taco Hoekwater 提出了一些与我的问题相似的事情,但反过来: 周数宏)
答案1
我还添加了与 PGFCalendar 相反但我们可以使用它和一些数学运算来获得所需一周的正确开始和结束日期。
PGFCalendar 和我的扩展程序TikZ-ext没有为这些提供任何高级接口,所以我们必须处理一些计数、值和转换。
这不会检查给定的一周是否确实在一年中。您可以使用它\weekinyear{174}{2021}
来获得与以下代码相同的结果。
代码
\documentclass{article}
\usepackage{pgfcalendar-ext}
\makeatletter
\newcommand*\weekinyear[2]{% #1 = week, #2 = year
\pgfcalendardatetojulian{#2-01-01}{\count@}%
\edef\wiy@first{\the\count@}%
\pgfcalendarjuliantoweekday{\count@}{\count@}%
\edef\wiy@day{\the\count@}%
\pgfcalendarjulianyeartoweek{\wiy@first}{#2}{\count@}%
\ifnum\count@>1 \count@=0 \fi% first day might be in last week of prev year
\pgfintset\count@{\wiy@first+(#1-\count@)*7-\wiy@day}%
\pgfcalendarjuliantodate{\count@}{\wiyStartY}{\wiyStartM}{\wiyStartD}%
\advance\count@ by 6
\pgfcalendarjuliantodate{\count@}{\wiyEndY}{\wiyEndM}{\wiyEndD}%
}
\makeatother
\begin{document}
\weekinyear{18}{2024}
Week 18 in year 2024 starts on
Monday \wiyStartY-\wiyStartM-\wiyStartD\ and
ends on Sunday \wiyEndY-\wiyEndM-\wiyEndD.
\end{document}
输出
2024 年第 18 周开始于 2024 年 4 月 29 日星期一,结束于 2024 年 5 月 5 日星期日。