Extraer año del parámetro que contiene fecha

Extraer año del parámetro que contiene fecha

Posible duplicado:
¿Cómo divido una cita?

¿Alguien sabe cómo extraer el año a partir de la fecha en el parámetro de su propia macro?

A saber,

\themacro#1{...}

donde #1contiene la fecha que ya está en formato yyyyo en formato dd.mm.yyyy, que \themacrose convertiría a simple yyyy...

Espero haber sido claro, bueno, en pocas palabras, solo necesito extraer el año a partir de la fecha (si la extracción es necesaria).

Respuesta1

user1189687 ya propuso una solución que creo que es mejor, pero como ya comencé a escribir esto, aquí está si desea una solución de texto simple:

El punto aquí es reconocer que estás en el primer caso o en el otro. Es trivial hacerlo si conoce el formato de su entrada. Pero aquí, aparentemente no es así.

Entonces lo que haría sería:

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

La ventaja de esta solución es que detecta una sintaxis incorrecta y puede tener un respaldo o generar un error, según lo desee.

Oh, casi lo olvido... Por supuesto, obtienes el año como texto de reemplazo de \year.

En caso de que existan, también puedes obtener \dayy \month.

Respuesta2

Pruebe \StrRighten el xstringpaquete:

\documentclass{article}

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

\begin{document}

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

\end{document}

con resultado:

ingrese la descripción de la imagen aquí

información relacionada