Obtendo a data do número da semana automaticamente para um ano específico

Obtendo a data do número da semana automaticamente para um ano específico

Existe uma maneira de gerar automaticamente a data com base no número da semana?

Mais precisamente: insiro o número da semana de um determinado ano e como saída obtenho a data de segunda a domingo?

Existem vários pacotes para criação de calendários, nenhum deles parece permitir isso. Alguém tem uma boa dica?

(Taco Hoekwater fez algo próximo à minha pergunta, mas ao contrário: Macro para número da semana)

Responder1

Eu também adicioneio inverso para PGFCalendarmas podemos usá-lo e um pouco de matemática para obter o dia correto de início e término da semana exigida.

Tanto o PGFCalendar quanto minha extensãoTikZ-extnão fornecemos uma interface de alto nível para nada disso, então temos que conciliar algumas contagens, valores e conversões.

Isso não verificará se uma determinada semana está realmente no ano. Você pode usar \weekinyear{174}{2021}para obter o mesmo resultado do código abaixo.

Código

\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}

Saída

A semana 18 do ano de 2024 começa na segunda-feira, 29/04/2024, e termina no domingo, 05/05/2024.

informação relacionada