Extraia o ano do parâmetro que contém a data

Extraia o ano do parâmetro que contém a data

Possível duplicata:
Como faço para dividir uma data?

Alguém sabe como extrair o ano da data no parâmetro da própria macro?

Nomeadamente,

\themacro#1{...}

onde #1contém a data já no formato yyyyou no formato dd.mm.yyyy, que \themacroseria convertido para simples yyyy...

Espero ter sido claro, bom, simplesmente falando, só preciso extrair o ano da data (se a extração for necessária).

Responder1

user1189687 já propôs uma solução que considero melhor, mas como já comecei a escrever isso, aqui está se você quiser uma solução de texto simples:

A questão aqui é reconhecer que você está no primeiro caso ou no outro. É trivial fazer isso se você souber o formato de sua entrada. Mas aqui, aparentemente você não.

Então o que eu faria seria:

\makeatletter

\def\@themacro #1.#2\end@themacro{%
  \def\@tempyr{#1}%
  \def\@temprem{#2}%
}%
%
\def\themacro #1 {%
  \let\day\relax%
  \let\month\relax%
  \let\year\relax%
  \let\@tempyr\relax%
  \let\@temprem\relax%
  \@themacro#1.\relax\end@themacro% get day or year
  \if\relax\@temprem\relax%
    \if\relax\@tempyr\relax%
      \GenericError{}{Wrong date format}{}{}% Manage the error
    \else%
      \edef\year{\expandafter\noexpand\@tempyr}%
    \fi%
  \else%
    \edef\day{\expandafter\noexpand\@tempyr}%
    \expandafter\@themacro\@temprem\end@themacro% get month
    \if\relax\@temprem\relax%
      \GenericError{}{Wrong date format}{}{}% Manage the Error
    \else%
      \edef\month{\expandafter\noexpand\@tempyr}%
      \expandafter\@themacro\@temprem\end@themacro% get year
      \if\relax\@temprem\relax%
        \edef\year{\expandafter\noexpand\@tempyr}%
      \else%
        \GenericError{}{Wrong date format}{}{}% Manage the Error
      \fi%
    \fi%
  \fi%
}%
\makeatother%

A vantagem desta solução é que você detecta sintaxe incorreta e pode ter um substituto ou gerar um erro, conforme desejar.

Ah, quase esqueci... É claro que você recebe o ano como texto substituto de \year.

Caso existam, você também pode obter \daye \month.

Responder2

Experimente \StrRightno xstringpacote:

\documentclass{article}

\usepackage{xstring}
\def\getYear#1{\StrRight{#1}{4}}

\begin{document}

\noindent\getYear{12.12.2012}\\
\getYear{2012}

\end{document}

com resultado:

insira a descrição da imagem aqui

informação relacionada