Извлечь год из параметра, содержащего дату

Извлечь год из параметра, содержащего дату

Возможный дубликат:
Как разделить свидание?

Кто-нибудь знает, как извлечь год из даты в параметре собственного макроса?

А именно,

\themacro#1{...}

где #1содержатся либо дата, уже указанная в формате yyyy, либо дата в формате dd.mm.yyyy, который \themacroбудет преобразован в обычный yyyy...

Надеюсь, я ясно выразился. Ну, проще говоря, мне просто нужно извлечь год из даты (если извлечение необходимо).

решение1

user1189687 уже предложил решение, которое, по-моему, лучше, но поскольку я уже начал это писать, вот, если вам нужно решение в виде простого текста:

Суть здесь в том, чтобы распознать, находитесь ли вы в первом случае или в другом. Это тривиально, если вы знаете формат вашего ввода. Но здесь, по-видимому, вы его не знаете.

Итак, что бы я сделал:

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

Преимущество этого решения в том, что вы обнаруживаете неверный синтаксис и можете воспользоваться запасным вариантом или выдать ошибку по своему усмотрению.

Ой, чуть не забыл... Конечно, год указан в качестве заменяющего текста \year.

Если они существуют, вы также можете получить \dayи \month.

решение2

Попробуйте \StrRightв xstringпакете:

\documentclass{article}

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

\begin{document}

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

\end{document}

с результатом:

введите описание изображения здесь

Связанный контент