%\iffalse
%<*package>
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%</package>
%\fi
% \iffalse
% Doc-Source file to use with LaTeX2e
% Copyright (C) 2015 Nicola Talbot, all rights reserved.
% Copyright (C) 2017 Sebastian Friedl, all rights reserved.
% \fi
% \iffalse
%<*driver>
\documentclass{ltxdoc}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{alltt}
\usepackage{csquotes}
\usepackage{graphicx}
\usepackage{hologo}
\usepackage{multicol}
\usepackage[bookmarks,
            hyperindex=false,
            pdfauthor={Nicola L.C. Talbot, Sebastian Friedl},
            pdftitle={datetime2.sty German Module}]{hyperref}
\usepackage{verbatim}

\usepackage[p,space]{erewhon}
\usepackage{sourcesanspro}
\usepackage{inconsolata}
\usepackage[utopia,vvarbb]{newtxmath}

\usepackage[left=4.50cm,right=2.75cm,top=3.25cm,bottom=2.75cm,nohead]{geometry}

\parindent0pt

\CheckSum{1085}

\renewcommand*{\usage}[1]{\hyperpage{#1}}
\renewcommand*{\main}[1]{\hyperpage{#1}}
\IndexPrologue{\section*{\indexname}\markboth{\indexname}{\indexname}}
\setcounter{IndexColumns}{2}

\newcommand*{\sty}[1]{\textsf{#1}}
\newcommand*{\opt}[1]{\texttt{#1}\index{#1=\texttt{#1}|main}}

\RecordChanges
\PageIndex
\CodelineNumbered

\begin{document}
\DocInput{datetime2-german.dtx}
\end{document}
%</driver>
%\fi
%
%\MakeShortVerb{"}
%
%\title{German Module for the \sty{datetime2} Package \\ {\large\url{https://github.com/SFr682k/datetime2-german}}}
%\author{\begin{tabular}{cp{.05\textwidth}c} Nicola L. C. Talbot && Sebastian Friedl \\ (inactive) && {\normalsize\href{mailto:sfr682k@t-online.de}{\texttt{sfr682k@t-online.de}}} \end{tabular}}
%\date{2017-11-13 (v2.1)}
%\maketitle
%
%
%\begin{abstract}
% This is the German language module for the \sty{datetime2}
% package. If you want to use the settings in this module you must
% install it in addition to installing \sty{datetime2}. If you use
% \sty{babel} or \sty{polyglossia}, you will need this module to
% prevent them from redefining \cs{today}. The \sty{datetime2}
% \opt{useregional} setting must be set to "text" or "numeric"
% for the language styles to be set.
% Alternatively, you can set the style in the document using
% \cs{DTMsetstyle}, but this may be changed by \cs{date}\meta{language}
% depending on the value of the \opt{useregional} setting.
%\end{abstract}
%
%
%
% Currently there is a regionless style as well as variant styles ("de-DE", "de-AT" and "de-CH"). \\[\smallskipamount]
% I'm only capable of German standard German. If I messed up anything in regards to format and/or spelling, or even a variant style with differences to the existing ones is missing, please create a feature request on GitHub or send me an e--mail. \\
% I would be very grateful, if some examples and/or a list of the weekdays' and months' spelling is/are also provided.
%
% \bigskip
% Thanks to Jürgen Spitzmüller for his valuable advice while developing Version 2.0 of this module.
%
%
% \clearpage
% \tableofcontents
% \clearpage
%
%
%
% \section{Installation}
% Extract the language definition files first:
% \begin{enumerate}
%     \item
%     Run \LaTeX\ over the file \texttt{datetime2-german.ins}: \\
%     \verb|latex datetime2-german.ins|
%     %
%     \item
%     Move all \texttt{*.ldf} files to \texttt{TEXMF/tex/latex/datetime2-contrib/datetime2-german/}
% \end{enumerate}
% Then, you can compile the documentation yourself by executing \\[\smallskipamount]
%\verb|pdflatex datetime2-german.dtx| \\
%\verb|makeindex -s gind.ist datetime2-german.idx| \\
%\verb|makeindex -s gglo.ist -o datetime2-german.gls datetime2-german.glo| \\
%\verb|pdflatex datetime2-german.dtx| \\
%\verb|pdflatex datetime2-german.dtx| \\[\medskipamount]
% or just use the precompiled documentation shipped with the sorce files. \\
% In both cases, copy the files \texttt{datetime2-german.pdf} and \texttt{README.md} to \\
% \texttt{TEXMF/doc/latex/datetime2-contrib/datetime2-german/}
%
%
%
% \clearpage
% \part{The Documentation}
% \section{Setting up \sty{datetime2} with a language module}
% \subsection{Loading a language module}
% \textit{There are three different ways to load the required language module. See the \sty{datetime2} documentation for further details}
%
% \medskip
%
% \textbf{Variant 1:} \\
% Request the desired language module explicitly by passing the "german", "de-DE", "de-AT" or "de-CH" option to the \sty{datetime2} package: \\[\smallskipamount]
%\verb|\documentclass{article}| \\
%\verb|\usepackage[german]{datetime2}| \\
%\verb|\begin{document}| \\
%\verb|\today| \\
%\verb|\end{document}| \\[\medskipamount]
%
% \textbf{Variant 2:} \\
% Load \sty{babel} and pass the "german", "austrian" or "swissgerman" option to the \verb|\documentclass| command (or to \sty{babel} directly). If you now pass the \opt{useregional} option to \sty{datetime2}, the language module suitable to the one specified with \sty{babel} is loaded: \\[\smallskipamount]
%\verb|\documentclass[german]{article}| \\
%\verb|\usepackage{babel}| \\
%\verb|\usepackage[useregional]{datetime2}| \\
%\verb|\begin{document}| \\
%\verb|\today| \\
%\verb|\end{document}| \\[\medskipamount]
%
% \textbf{Variant 3:} \\
% When using \sty{polyglossia}, you should request the desired language module by passing the "german", "de-DE", "de-AT" or "de-CH" option to the \sty{datetime2} package: \\[\smallskipamount]
%\verb|\documentclass{article}| \\
%\verb|\usepackage{polyglossia}| \\
%\verb|\setmainlanguage{german}| \\
%\verb|\usepackage[german]{datetime2}| \\
%\verb|\begin{document}| \\
%\verb|\today| \\
%\verb|\end{document}|
%
%
% \subsection{Other features}
% \subsubsection{Showing the weekday}
% All language modules shipped with \sty{datetime2-german} support showing the weekday. \\
% To enable this feature, pass the \opt{showdow} option to the \sty{datetime2} package. \\
% Please note, that this has no effect when using the "numeric" style of the "de-AT" variant.
%
% \subsubsection{Using abbreviated weekday and month names}
% To enable abbreviated weekday and month names, use \verb|\DTMlangsetup[german]{abbr}|. \\
% To disable them, use \verb|\DTMlangsetup[german]{abbr=false}|.
%
% \medskip
% In both cases, replace "german" with the used variant style ("de-DE", "de-AT" or "de-CH"). \\
% Please note, that this has no effect when using the "numeric" style of the "de-AT" variant.
%
%
% \section{Style examples}
% \subsection{Regionless style}
% \begin{itemize}
%    \item Non--numeric style: \\
%    3. Oktober 2017, 12:51:04 MESZ \\
%    3. Okt. '17, 12:51:04 MESZ \hfill \textit{abbreviated version} \\
%    Dienstag, 3. Oktober 2017, 12:51:04 MESZ \hfill \textit{with \opt{showdow} option} \\
%    Di, 3. Okt. '17, 12:51:04 MESZ \hfill \textit{abbreviated version with \opt{showdow} option}
%    %
%    \item Numeric style: \\
%    03.10.2017, 12:51:04 MESZ \\
%    03.10.17, 12:51:04 MESZ \hfill \textit{abbreviated version} \\
%    Dienstag, 03.10.2017, 12:51:04 MESZ \hfill \textit{with \opt{showdow} option} \\
%    Di, 03.10.17, 12:51:04 MESZ \hfill \textit{abbreviated version with \opt{showdow} option}
% \end{itemize}
%
%
% \subsection{German style (\texttt{de-DE})}
% \begin{itemize}
%    \item Non--numeric style: \\
%    3. Oktober 2017, 12:51:04 MESZ \\
%    3. Okt. '17, 12:51:04 MESZ \hfill \textit{abbreviated version} \\
%    Dienstag, 3. Oktober 2017, 12:51:04 MESZ \hfill \textit{with \opt{showdow} option} \\
%    Di, 3. Okt. '17, 12:51:04 MESZ \hfill \textit{abbreviated version with \opt{showdow} option}
%    %
%    \item Numeric style: \\
%    03.10.2017, 12:51:04 MESZ \\
%    03.10.17, 12:51:04 MESZ \hfill \textit{abbreviated version} \\
%    Dienstag, 03.10.2017, 12:51:04 MESZ \hfill \textit{with \opt{showdow} option} \\
%    Di, 03.10.17, 12:51:04 MESZ \hfill \textit{abbreviated version with \opt{showdow} option}
% \end{itemize}
%
%
% \subsection{Austrian style (\texttt{de-AT})}
% \begin{itemize}
%    \item Non--numeric style: \\
%    3. Oktober 2017, 12:51:04 MESZ \\
%    3. Okt. 2017, 12:51:04 MESZ \hfill \textit{abbreviated version} \\
%    Dienstag, 3. Oktober 2017, 12:51:04 MESZ \hfill \textit{with \opt{showdow} option} \\
%    Di, 3. Okt. 2017, 12:51:04 MESZ \hfill \textit{abbreviated version with \opt{showdow} option}
%    %
%    \item Numeric style: \\
%    2017-10-03, 12:51:04 MESZ
% \end{itemize}
%
%
% \subsection{Swiss style (\texttt{de-CH})}
% \begin{itemize}
%    \item Non--numeric style: \\
%    3. Oktober 2017, 12.51.04 Uhr MESZ \\
%    3. Okt. 2017, 12.51.04 Uhr MESZ \hfill \textit{abbreviated version} \\
%    Dienstag, 3. Oktober 2017, 12.51.04 Uhr MESZ \hfill \textit{with \opt{showdow} option} \\
%    Di, 3. Okt. 2017, 12.51.04 Uhr MESZ \hfill \textit{abbreviated version with \opt{showdow} option}
%    %
%    \item Numeric style: \\
%    03.10.2017, 12.51.04 Uhr MESZ \\
%    03.10.17, 12.51.04 Uhr MESZ \hfill \textit{abbreviated version} \\
%    Dienstag, 03.10.2017, 12.51.04 Uhr MESZ \hfill \textit{with \opt{showdow} option} \\
%    Di, 03.10.17, 12.51.04 Uhr MESZ \hfill \textit{abbreviated version with \opt{showdow} option}
% \end{itemize}
%
%
%
% \section{Further customization of styles}
% There are a number of settings provided that can be used in \verb|\DTMlangsetup| to modify the date-time style. These are:
% \begin{description}
%	\item["dowdaysep"]%
%	The separator between the day of week name and the day of month number.
%
%	\item["daymonthsep"]%
%	The separator between the day and the month name
%
%	\item["monthyearsep"]%
%	The separator between the month name and year
%
%	\item["datesep"]%
%	The separator between the date numbers in the "numeric style"s
%
%	\item["timesep"]%
%	The separator between hours, minutes and seconds
%
%	\item["datetimesep"]%
%	The separator between the date and time for the full date-time format
%
%	\item["timezonesep"]%
%	The separator between the time and zone for the full date-time format
%
%	\item["abbr"]%
%	This is a boolean key. If "true", the month (and weekday name, if shown) is abbreviated.
%
%	\item["mapzone"]%
%	This is a boolean key. If "true", the time zone mappings are applied.
%
%	\item["showdayofmonth"]%
%	A boolean key that determines whether or not to show the day of the month
%
%	\item["showyear"]%
%	A boolean key that determines whether or not to show the year
%\end{description}
%
%
% Although the keys listed here are \textit{defined} for all variant styles, it depends on \sty{datetime2}'s setup and the requested styles whether they're \textit{used}. \\
% For more information about the \verb|\DTMlangsetup| command see the documentation of the main \sty{datetime2} package.
%
%
% \section{License}
% This material is subject to the \LaTeX\ Project Public License, Version 1.3c or later. \\
% See the copyright headers of the single files for further details.
%
%
%
%\StopEventually{%
%\clearpage
%\phantomsection
%\addcontentsline{toc}{section}{Change History}%
%\PrintChanges
%\addcontentsline{toc}{section}{\indexname}%
%\PrintIndex}
%\clearpage
%\part{The Code}
%\iffalse
%    \begin{macrocode}
%<*datetime2-german-utf8.ldf>
%    \end{macrocode}
%\fi
%\section{Basic German module}
% This module defines the \enquote{basic} German style, which contains the necessary vocab for all German localizations. \\
% The date and time format is based on the "de-DE" variant.
%
%\subsection{Weekday and month names (UTF-8)}
%This file contains the settings that use UTF-8 characters. This
%file is loaded if \hologo{XeLaTeX} or \hologo{LuaLaTeX} are used. Please make sure
%your text editor is set to UTF-8 if you want to view this code.
%\changes{1.0}{2015-03-27}{Initial release}
%
% Identify module
%    \begin{macrocode}
\ProvidesDateTimeModule{german-utf8}[2017/11/13 v2.1]
%    \end{macrocode}
%\begin{macro}{\DTMgermanordinal}
%    \begin{macrocode}
\newcommand*{\DTMgermanordinal}[1]{%
  \number#1 
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermanmonthname}
% German month names.
%    \begin{macrocode}
\newcommand*{\DTMgermanmonthname}[1]{%
  \ifcase#1
  \or
  Januar%
  \or
  Februar%
  \or
  März%
  \or
  April%
  \or
  Mai%
  \or
  Juni%
  \or
  Juli%
  \or
  August%
  \or
  September%
  \or
  Oktober%
  \or
  November%
  \or
  Dezember%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeATmonthname}
%\changes{2.0}{2017-10-03}{Austrian month names implemented}
% Austrian German month names. Spot the difference :D
%    \begin{macrocode}
\newcommand*{\DTMdeATmonthname}[1]{%
  \ifcase#1
  \or
  Jänner%
  \or
  Februar%
  \or
  März%
  \or
  April%
  \or
  Mai%
  \or
  Juni%
  \or
  Juli%
  \or
  August%
  \or
  September%
  \or
  Oktober%
  \or
  November%
  \or
  Dezember%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermanshortmonthname}
% Abbreviated German month names.
%\changes{1.2}{2017-09-10}{Short month names implemented}
%\changes{2.0}{2017-10-03}{Short month names fixed}
%    \begin{macrocode}
\newcommand*{\DTMgermanshortmonthname}[1]{%
  \ifcase#1
  \or
  Jan.%
  \or
  Feb.%
  \or
  März%
  \or
  Apr.%
  \or  
  Mai%
  \or
  Juni%
  \or
  Juli%
  \or
  Aug.%
  \or
  Sept.%
  \or
  Okt.%
  \or
  Nov.%
  \or
  Dez.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeATshortmonthname}
%\changes{2.0}{2017-10-03}{Austrian short month names implemented}
% Abbreviated Austrian German month names.
%    \begin{macrocode}
\newcommand*{\DTMdeATshortmonthname}[1]{%
  \ifcase#1
  \or
  Jän.%
  \or
  Feb.%
  \or
  März%
  \or
  Apr.%
  \or  
  Mai%
  \or
  Juni%
  \or
  Juli%
  \or
  Aug.%
  \or
  Sept.%
  \or
  Okt.%
  \or
  Nov.%
  \or
  Dez.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHshortmonthname}
% Abbreviated Swiss German month names.
%\changes{2.0}{2017-10-03}{Swiss German short month names implemented}
%    \begin{macrocode}
\newcommand*{\DTMdeCHshortmonthname}[1]{%
  \ifcase#1
  \or
  Jan.%
  \or
  Febr.%
  \or
  März%
  \or
  April%
  \or  
  Mai%
  \or
  Juni%
  \or
  Juli%
  \or
  Aug.%
  \or
  Sept.%
  \or
  Okt.%
  \or
  Nov.%
  \or
  Dez.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermanweekdayname}
% Provides weekday names
%    \begin{macrocode}
\newcommand*{\DTMgermanweekdayname}[1]{%
  \ifcase#1
  Montag%
  \or
  Dienstag%
  \or
  Mittwoch%
  \or
  Donnerstag%
  \or
  Freitag%
  \or
  Samstag%
  \or
  Sonntag%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermanshortweekdayname}
%Provides abbreviated weekday names
%\changes{1.2}{2017-09-10}{Short weekday names implemented}
%\changes{2.0}{2017-10-03}{Short weekday names fixed}
%    \begin{macrocode}
\newcommand*{\DTMgermanshortweekdayname}[1]{%
  \ifcase#1
  Mo%
  \or
  Di%
  \or
  Mi%
  \or
  Do%
  \or
  Fr%
  \or
  Sa%
  \or
  So%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\iffalse
%    \begin{macrocode}
%</datetime2-german-utf8.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datetime2-german-ascii.ldf>
%    \end{macrocode}
%\fi
%\subsection{Weekday and month names (ASCII)}
%This file contains the settings that use \LaTeX\ commands for
%non-ASCII characters. This should be input if neither \hologo{XeLaTeX} nor
%\hologo{LuaLaTeX} are used. Even if the user has loaded \sty{inputenc} with
%"utf8", this file should still be used not the
%\texttt{datetime2-german-utf8.ldf} file as the non-ASCII
%characters are made active in that situation and would need
%protecting against expansion.
%\changes{1.0}{2015-03-27}{Initial release}
%
% Identify module
%    \begin{macrocode}
\ProvidesDateTimeModule{german-ascii}[2017/11/13 v2.1]
%    \end{macrocode}
%
%\begin{macro}{\DTMgermanordinal}
%    \begin{macrocode}
\newcommand*{\DTMgermanordinal}[1]{%
  \number#1
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermanmonthname}
% German month names.
%    \begin{macrocode}
\newcommand*{\DTMgermanmonthname}[1]{%
  \ifcase#1
  \or
  Januar%
  \or
  Februar%
  \or
  M\protect\"arz%
  \or
  April%
  \or
  Mai%
  \or
  Juni%
  \or
  Juli%
  \or
  August%
  \or
  September%
  \or
  Oktober%
  \or
  November%
  \or
  Dezember%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeATmonthname}
%\changes{2.0}{2017-10-03}{Austrian month names implemented}
% Austrian German month names.
%    \begin{macrocode}
\newcommand*{\DTMdeATmonthname}[1]{%
  \ifcase#1
  \or
  J\protect\"anner%
  \or
  Februar%
  \or
  M\protect\"arz%
  \or
  April%
  \or
  Mai%
  \or
  Juni%
  \or
  Juli%
  \or
  August%
  \or
  September%
  \or
  Oktober%
  \or
  November%
  \or
  Dezember%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermanshortmonthname}
% Abbreviated German month names.
%\changes{1.2}{2017-09-10}{Short month names implemented}
%\changes{2.0}{2017-10-03}{Short month names fixed}
%    \begin{macrocode}
\newcommand*{\DTMgermanshortmonthname}[1]{%
  \ifcase#1
  \or
  Jan.%
  \or
  Feb.%
  \or
  M\protect\"arz%
  \or
  Apr.%
  \or
  Mai%
  \or
  Juni%
  \or
  Juli%
  \or
  Aug.%
  \or
  Sept.%
  \or
  Okt.%
  \or
  Nov.%
  \or
  Dez.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeATshortmonthname}
%\changes{2.0}{2017-10-03}{Austrian short month names implemented}
% Abbreviated Austrian German month names.
%    \begin{macrocode}
\newcommand*{\DTMdeATshortmonthname}[1]{%
  \ifcase#1
  \or
  J\protect\"an.%
  \or
  Feb.%
  \or
  M\protect\"arz%
  \or
  Apr.%
  \or
  Mai%
  \or
  Juni%
  \or
  Juli%
  \or
  Aug.%
  \or
  Sept.%
  \or
  Okt.%
  \or
  Nov.%
  \or
  Dez.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHshortmonthname}
% Abbreviated Swiss German month names.
%\changes{2.0}{2017-10-03}{Swiss German short month names implemented}
%    \begin{macrocode}
\newcommand*{\DTMdeCHshortmonthname}[1]{%
	\ifcase#1
	\or
	Jan.%
	\or
	Febr.%
	\or
	M\protect\"arz%
	\or
	April%
	\or
	Mai%
	\or
	Juni%
	\or
	Juli%
	\or
	Aug.%
	\or
	Sept.%
	\or
	Okt.%
	\or
	Nov.%
	\or
	Dez.%
	\fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermanweekdayname}
%Provides weekday names
%    \begin{macrocode}
\newcommand*{\DTMgermanweekdayname}[1]{%
  \ifcase#1
  Montag%
  \or
  Dienstag%
  \or
  Mittwoch%
  \or
  Donnerstag%
  \or
  Freitag%
  \or
  Samstag%
  \or
  Sonntag%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermanshortweekdayname}
%Provides abbreviated weekday names
%\changes{1.2}{2017-09-10}{Short weekday names implemented}
%\changes{2.0}{2017-10-03}{Short weekday names fixed}
%    \begin{macrocode}
\newcommand*{\DTMgermanshortweekdayname}[1]{%
  \ifcase#1
  Mo%
  \or
  Di%
  \or
  Mi%
  \or
  Do%
  \or
  Fr%
  \or
  Sa%
  \or
  So%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\iffalse
%    \begin{macrocode}
%</datetime2-german-ascii.ldf>
%    \end{macrocode}
%\fi
%
%\subsection{Basic German Module (\texttt{datetime2-german.ldf})}
%\changes{1.0}{2015-03-27}{Initial release}
%
%\iffalse
%    \begin{macrocode}
%<*datetime2-german.ldf>
%    \end{macrocode}
%\fi
%
% Identify Module
%    \begin{macrocode}
\ProvidesDateTimeModule{german}[2017/11/13 v2.1]
%    \end{macrocode}
% Need to find out if \hologo{XeTeX} or \hologo{LuaTeX} are being used.
%    \begin{macrocode}
\RequirePackage{ifxetex,ifluatex}
%    \end{macrocode}
% \hologo{XeTeX} and \hologo{LuaTeX} natively support UTF-8, so load
% \texttt{german-utf8} if either of those engines are used
% otherwise load \texttt{german-ascii}.
%    \begin{macrocode}
\ifxetex
 \RequireDateTimeModule{german-utf8}
\else
 \ifluatex
   \RequireDateTimeModule{german-utf8}
 \else
   \RequireDateTimeModule{german-ascii}
 \fi
\fi
%    \end{macrocode}
%
% Define the \texttt{german} style.
%
% Allow the user a way of configuring the "german" and
% "german-numeric" styles. This doesn't use the package wide
% separators such as
% \cs{dtm@datetimesep} in case other date formats are also required.
%
%\begin{macro}{\DTMgermandowdaysep}
% The separator between weekday and day
%    \begin{macrocode}
\newcommand*{\DTMgermandowdaysep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermandaymonthsep}
% The separator between the day and month for the text format.
%    \begin{macrocode}
\newcommand*{\DTMgermandaymonthsep}{.\DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermanmonthyearsep}
% The separator between the month and year for the text format.
%    \begin{macrocode}
\newcommand*{\DTMgermanmonthyearsep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermandatetimesep}
% The separator between the date and time blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMgermandatetimesep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermantimezonesep}
% The separator between the time and zone blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMgermantimezonesep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermandatesep}
% The separator for the numeric date format.
%    \begin{macrocode}
\newcommand*{\DTMgermandatesep}{.}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMgermantimesep}
% The separator for the numeric time format.
%    \begin{macrocode}
\newcommand*{\DTMgermantimesep}{:}
%    \end{macrocode}
%\end{macro}
%
%Provide keys that can be used in \cs{DTMlangsetup} to set these
%separators.
%    \begin{macrocode}
\DTMdefkey{german}{dowdaysep}{\renewcommand*{\DTMgermandowdaysep}{#1}}
\DTMdefkey{german}{daymonthsep}{\renewcommand*{\DTMgermandaymonthsep}{#1}}
\DTMdefkey{german}{monthyearsep}{\renewcommand*{\DTMgermanmonthyearsep}{#1}}
\DTMdefkey{german}{datetimesep}{\renewcommand*{\DTMgermandatetimesep}{#1}}
\DTMdefkey{german}{timezonesep}{\renewcommand*{\DTMgermantimezonesep}{#1}}
\DTMdefkey{german}{datesep}{\renewcommand*{\DTMgermandatesep}{#1}}
\DTMdefkey{german}{timesep}{\renewcommand*{\DTMgermantimesep}{#1}}
%    \end{macrocode}
%
% 
% Define a boolean key that can switch between full and abbreviated formats for
% the month and day of week names in the text format.
%    \begin{macrocode}
\DTMdefboolkey{german}{abbr}[true]{}
%    \end{macrocode}
%
% The default is full name
%    \begin{macrocode}
\DTMsetbool{german}{abbr}{false}
%    \end{macrocode}
%
% Define a boolean key that determines if the time zone mappings
% should be used.
%    \begin{macrocode}
\DTMdefboolkey{german}{mapzone}[true]{}
%    \end{macrocode}
% The default is to use mappings.
%    \begin{macrocode}
\DTMsetbool{german}{mapzone}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the day of month should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{german}{showdayofmonth}[true]{}
%    \end{macrocode}
% The default is to show the day of month.
%    \begin{macrocode}
\DTMsetbool{german}{showdayofmonth}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the year should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{german}{showyear}[true]{}
%    \end{macrocode}
% The default is to show the year.
%    \begin{macrocode}
\DTMsetbool{german}{showyear}{true}
%    \end{macrocode}
%
% Define the "german" style.
%\changes{1.1}{2017-03-09}{fixed bug in \cs{DTMDisplaydate}}
%\changes{1.2}{2017-09-10}{Short month names implemented}
%\changes{1.2}{2017-09-10}{Short weekday names implemented}
%\changes{1.2}{2017-09-10}{Day of week implemented}
%\changes{2.1}{2017-11-13}{Fixed strange spacing when switching languages}
%    \begin{macrocode}
\DTMnewstyle
 {german}% label
 {% date style
   \renewcommand*\DTMdisplaydate[4]{%
   	 \ifDTMshowdow
   	   \ifnum##4>-1
   	     \DTMifbool{german}{abbr}%
   	     {\DTMgermanshortweekdayname{##4}}%
   	     {\DTMgermanweekdayname{##4}}%
   	     \DTMgermandowdaysep
   	   \fi
   	 \fi
   	 %
     \DTMifbool{german}{showdayofmonth}%
     {\DTMgermanordinal{##3}\DTMgermandaymonthsep}%
     {}%
     %
     \DTMifbool{german}{abbr}%
     {\DTMgermanshortmonthname{##2}}%
     {\DTMgermanmonthname{##2}}%
     %
     \DTMifbool{german}{showyear}%
     {%
       \DTMgermanmonthyearsep%
       \DTMifbool{german}{abbr}%
       {'\DTMtwodigits{##1}}%
       {\number##1 }% space intended
     }%
     {}%
   }%
   \renewcommand*\DTMDisplaydate[4]{%
     \ifDTMshowdow
       \ifnum##4>-1
         \DTMifbool{german}{abbr}%
         {\DTMgermanshortweekdayname{##4}}%
         {\DTMgermanweekdayname{##4}}%
         \DTMgermandowdaysep
       \fi
     \fi
     %
     \DTMifbool{german}{showdayofmonth}%
     {\DTMgermanordinal{##3}\DTMgermandaymonthsep}%
     {}%
     %
     \DTMifbool{german}{abbr}%
     {\DTMgermanshortmonthname{##2}}%
     {\DTMgermanmonthname{##2}}%
     %
     \DTMifbool{german}{showyear}%
     {%
       \DTMgermanmonthyearsep%
       \DTMifbool{german}{abbr}%
       {'\DTMtwodigits{##1}}%
       {\number##1 }% space intended
     }%
     {}%
    }%
   }%
 {% time style (use default)
   \renewcommand*\DTMdisplaytime[3]{%
   	\DTMtwodigits{##1}%
   	\DTMgermantimesep\DTMtwodigits{##2}%
   	\ifDTMshowseconds\DTMgermantimesep\DTMtwodigits{##3}\fi
   }%
 }%
 {% zone style
   \DTMresetzones
   \DTMgermanzonemaps
   \renewcommand*{\DTMdisplayzone}[2]{%
     \DTMifbool{german}{mapzone}%
     {\DTMusezonemapordefault{##1}{##2}}%
     {%
       \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
       \ifDTMshowzoneminutes\DTMgermantimesep\DTMtwodigits{##2}\fi
     }%
   }%
 }%
 {% full style
   \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
     \DTMdisplaydate{##1}{##2}{##3}{##4}%
     \DTMgermandatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
     \DTMgermantimezonesep
     \DTMdisplayzone{##8}{##9}%
    \fi
   }%
   \renewcommand*{\DTMDisplay}[9]{%
    \ifDTMshowdate
     \DTMDisplaydate{##1}{##2}{##3}{##4}%
     \DTMgermandatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
     \DTMgermantimezonesep
     \DTMdisplayzone{##8}{##9}%
    \fi
   }%
 }%
%    \end{macrocode}
%
% Define numeric style.
%\changes{1.2}{2017-09-10}{Day of week implemented}
%\changes{2.0}{2017-10-03}{Bugfix: month-year-separator}
%    \begin{macrocode}
\DTMnewstyle
 {german-numeric}% label
 {% date style
    \renewcommand*\DTMdisplaydate[4]{%
      \ifDTMshowdow
        \ifnum##4>-1
          \DTMifbool{german}{abbr}%
          {\DTMgermanshortweekdayname{##4}}%
          {\DTMgermanweekdayname{##4}}%
          \DTMgermandowdaysep
        \fi
      \fi
      %
      \DTMifbool{german}{showdayofmonth}%
      {%
        \DTMtwodigits{##3}%
        \DTMgermandatesep
      }%
      {}%
      \DTMtwodigits{##2}%
      \DTMgermandatesep%
      \DTMifbool{german}{showyear}%
      {%
        \DTMifbool{german}{abbr}%
        {\DTMtwodigits{##1}}%
        {\number##1 }% space intended
      }%
      {}%
    }%
    \renewcommand*{\DTMDisplaydate}[4]{\DTMdisplaydate{##1}{##2}{##3}{##4}}%
 }%
 {% time style
    \renewcommand*\DTMdisplaytime[3]{%
      \DTMtwodigits{##1}%
      \DTMgermantimesep\DTMtwodigits{##2}%
      \ifDTMshowseconds\DTMgermantimesep\DTMtwodigits{##3}\fi
    }%
 }%
 {% zone style
   \DTMresetzones
   \DTMgermanzonemaps
   \renewcommand*{\DTMdisplayzone}[2]{%
     \DTMifbool{german}{mapzone}%
     {\DTMusezonemapordefault{##1}{##2}}%
     {%
       \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
       \ifDTMshowzoneminutes\DTMgermantimesep\DTMtwodigits{##2}\fi
     }%
   }%
 }%
 {% full style
   \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
     \DTMdisplaydate{##1}{##2}{##3}{##4}%
     \DTMgermandatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
     \DTMgermantimezonesep
     \DTMdisplayzone{##8}{##9}%
    \fi
   }%
   \renewcommand*{\DTMDisplay}{\DTMdisplay}%
 }
%    \end{macrocode}
%
%\begin{macro}{\DTMgermanzonemaps}
% The time zone mappings are set through this command, which can be
% redefined if extra mappings are required or mappings need to be
% removed.
%\changes{1.2}{2017-09-10}{German time zone names (ME[S]Z)}
%    \begin{macrocode}
\newcommand*{\DTMgermanzonemaps}{%
  \DTMdefzonemap{01}{00}{MEZ}%
  \DTMdefzonemap{02}{00}{MESZ}%
}
%    \end{macrocode}
%\end{macro}

% Switch style according to the \opt{useregional} setting.
%    \begin{macrocode}
\DTMifcaseregional
{}% do nothing
{\DTMsetstyle{german}}
{\DTMsetstyle{german-numeric}}
%    \end{macrocode}
%
% Redefine \cs{dategerman} (or \cs{date}\meta{dialect}) to prevent
% \sty{babel} from resetting \cs{today}. (For this to work,
% \sty{babel} must already have been loaded if it's required.)
%    \begin{macrocode}
\ifcsundef{date\CurrentTrackedDialect}
{%
  \ifundef\dategerman
  {% do nothing
  }%
  {%
    \def\dategerman{%
      \DTMifcaseregional
      {}% do nothing
      {\DTMsetstyle{german}}%
      {\DTMsetstyle{german-numeric}}%
    }%
  }%
}%
{%
  \csdef{date\CurrentTrackedDialect}{%
    \DTMifcaseregional
    {}% do nothing
    {\DTMsetstyle{german}}%
    {\DTMsetstyle{german-numeric}}%
  }%
}%
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datetime2-german.ldf>
%    \end{macrocode}
%\fi
%
%
%
%
%
%
%
%
%
%
% \section{German localization (\texttt{de-DE}, \texttt{datetime2-de-DE.ldf})}
%\changes{2.0}{2017-10-03}{German localization added}
%\iffalse
%    \begin{macrocode}
%<*datetime2-de-DE.ldf>
%    \end{macrocode}
%\fi
% Identify Module
%    \begin{macrocode}
\ProvidesDateTimeModule{de-DE}[2017/11/13 v2.1]
%    \end{macrocode}
% Require the basic German module
%    \begin{macrocode}
\RequireDateTimeModule{german}
%    \end{macrocode}
%
%
% Allow the user a way of configuring the "de-DE" and
% "de-DE-numeric" styles. This doesn't use the package wide
% separators such as
% \cs{dtm@datetimesep} in case other date formats are also required.
%
%\begin{macro}{\DTMdeDEdowdaysep}
% The separator between weekday and day
%    \begin{macrocode}
\newcommand*{\DTMdeDEdowdaysep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeDEdaymonthsep}
% The separator between the day and month for the text format.
%    \begin{macrocode}
\newcommand*{\DTMdeDEdaymonthsep}{.\DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeDEmonthyearsep}
% The separator between the month and year for the text format.
%    \begin{macrocode}
\newcommand*{\DTMdeDEmonthyearsep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeDEdatetimesep}
% The separator between the date and time blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMdeDEdatetimesep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeDEtimezonesep}
% The separator between the time and zone blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMdeDEtimezonesep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeDEdatesep}
% The separator for the numeric date format.
%    \begin{macrocode}
\newcommand*{\DTMdeDEdatesep}{.}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeDEtimesep}
% The separator for the numeric time format.
%    \begin{macrocode}
\newcommand*{\DTMdeDEtimesep}{:}
%    \end{macrocode}
%\end{macro}
%
% Provide keys that can be used in \cs{DTMlangsetup} to set these
% separators.
%    \begin{macrocode}
\DTMdefkey{de-DE}{dowdaysep}{\renewcommand*{\DTMdeDEdowdaysep}{#1}}
\DTMdefkey{de-DE}{daymonthsep}{\renewcommand*{\DTMdeDEdaymonthsep}{#1}}
\DTMdefkey{de-DE}{monthyearsep}{\renewcommand*{\DTMdeDEmonthyearsep}{#1}}
\DTMdefkey{de-DE}{datetimesep}{\renewcommand*{\DTMdeDEdatetimesep}{#1}}
\DTMdefkey{de-DE}{timezonesep}{\renewcommand*{\DTMdeDEtimezonesep}{#1}}
\DTMdefkey{de-DE}{datesep}{\renewcommand*{\DTMdeDEdatesep}{#1}}
\DTMdefkey{de-DE}{timesep}{\renewcommand*{\DTMdeDEtimesep}{#1}}
%    \end{macrocode}
%
% 
% Define a boolean key that can switch between full and abbreviated formats for
% the month and day of week names in the text format.
%    \begin{macrocode}
\DTMdefboolkey{de-DE}{abbr}[true]{}
%    \end{macrocode}
%
% The default is full name
%    \begin{macrocode}
\DTMsetbool{de-DE}{abbr}{false}
%    \end{macrocode}
%
% Define a boolean key that determines if the time zone mappings
% should be used.
%    \begin{macrocode}
\DTMdefboolkey{de-DE}{mapzone}[true]{}
%    \end{macrocode}
% The default is to use mappings.
%    \begin{macrocode}
\DTMsetbool{de-DE}{mapzone}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the day of month should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{de-DE}{showdayofmonth}[true]{}
%    \end{macrocode}
% The default is to show the day of month.
%    \begin{macrocode}
\DTMsetbool{de-DE}{showdayofmonth}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the year should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{de-DE}{showyear}[true]{}
%    \end{macrocode}
% The default is to show the year.
%    \begin{macrocode}
\DTMsetbool{de-DE}{showyear}{true}
%    \end{macrocode}
%
%
% Define the "de-DE" style
%    \begin{macrocode}
\DTMnewstyle
{de-DE}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-DE}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
        \DTMdeDEdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-DE}{showdayofmonth}%
    {\DTMgermanordinal{##3}\DTMdeDEdaymonthsep}%
    {}%
    %
    \DTMifbool{de-DE}{abbr}%
    {\DTMgermanshortmonthname{##2}}%
    {\DTMgermanmonthname{##2}}%
    %
    \DTMifbool{de-DE}{showyear}%
    {%
      \DTMdeDEmonthyearsep%
      \DTMifbool{de-DE}{abbr}%
      {'\DTMtwodigits{##1}}%
      {\number##1 }% space intended
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-DE}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
        \DTMdeDEdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-DE}{showdayofmonth}%
    {\DTMgermanordinal{##3}\DTMdeDEdaymonthsep}%
    {}%
    %
    \DTMifbool{de-DE}{abbr}%
    {\DTMgermanshortmonthname{##2}}%
    {\DTMgermanmonthname{##2}}%
    %
    \DTMifbool{de-DE}{showyear}%
    {%
      \DTMdeDEmonthyearsep%
      \DTMifbool{de-DE}{abbr}%
      {'\DTMtwodigits{##1}}%
      {\number##1 }% space intended
    }%
    {}%
  }
}%
{% time style (use default)
  \renewcommand*\DTMdisplaytime[3]{%
    \DTMtwodigits{##1}%
    \DTMdeDEtimesep\DTMtwodigits{##2}%
    \ifDTMshowseconds\DTMdeDEtimesep\DTMtwodigits{##3}\fi
  }%
}%
{% zone style
  \DTMresetzones
  \DTMgermanzonemaps
  \renewcommand*{\DTMdisplayzone}[2]{%
    \DTMifbool{de-DE}{mapzone}%
    {\DTMusezonemapordefault{##1}{##2}}%
    {%
      \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
      \ifDTMshowzoneminutes\DTMdeDEtimesep\DTMtwodigits{##2}\fi
    }%
  }%
}%
{% full style
  \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
      \DTMdisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeDEdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeDEtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
  \renewcommand*{\DTMDisplay}[9]{%
    \ifDTMshowdate
      \DTMDisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeDEdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeDEtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
}%
%    \end{macrocode}
%
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle
{de-DE-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-DE}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
        \DTMdeDEdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-DE}{showdayofmonth}%
    {%
      \DTMtwodigits{##3}%
      \DTMdeDEdatesep
    }%
    {}%
    \DTMtwodigits{##2}%
    \DTMdeDEdatesep%
    \DTMifbool{de-DE}{showyear}%
    {%
      \DTMifbool{de-DE}{abbr}%
      {\DTMtwodigits{##1}}%
      {\number##1 }% space intended
    }%
    {}%
    }%
  \renewcommand*{\DTMDisplaydate}[4]{\DTMdisplaydate{##1}{##2}{##3}{##4}}%
}%
{% time style
  \renewcommand*\DTMdisplaytime[3]{%
    \DTMtwodigits{##1}%
    \DTMdeDEtimesep\DTMtwodigits{##2}%
    \ifDTMshowseconds\DTMdeDEtimesep\DTMtwodigits{##3}\fi
  }%
}%
{% zone style
  \DTMresetzones
  \DTMgermanzonemaps
  \renewcommand*{\DTMdisplayzone}[2]{%
    \DTMifbool{de-DE}{mapzone}%
    {\DTMusezonemapordefault{##1}{##2}}%
    {%
      \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
      \ifDTMshowzoneminutes\DTMgermantimesep\DTMtwodigits{##2}\fi
    }%
  }%
}%
{% full style
  \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
      \DTMdisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeDEdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeDEtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
  \renewcommand*{\DTMDisplay}{\DTMdisplay}%
}
%    \end{macrocode}
%
% Switch style according to the \opt{useregional} setting.
%    \begin{macrocode}
\DTMifcaseregional
  {}% do nothing
  {\DTMsetstyle{de-DE}}
  {\DTMsetstyle{de-DE-numeric}}
%    \end{macrocode}
%
% Redefine \cs{dategerman} (or \cs{date}\meta{dialect}) to prevent
% \sty{babel} from resetting \cs{today}. (For this to work,
% \sty{babel} must already have been loaded if it's required.)
%    \begin{macrocode}
\ifcsundef{date\CurrentTrackedDialect}
{%
  \ifundef\dategerman
  {% do nothing
  }%
  {%
    \def\dategerman{%
      \DTMifcaseregional
      {}% do nothing
      {\DTMsetstyle{german}}%
      {\DTMsetstyle{german-numeric}}%
    }%
  }%
}%
{%
  \csdef{date\CurrentTrackedDialect}{%
    \DTMifcaseregional
    {}% do nothing
    {\DTMsetstyle{de-DE}}%
    {\DTMsetstyle{de-DE-numeric}}
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%</datetime2-de-DE.ldf>
%    \end{macrocode}
%\fi
%
%
%
%
%
%
%
%
%
%
% \section{Austrian German localization (\texttt{de-AT}, \texttt{datetime2-de-AT.ldf})}
%\changes{2.0}{2017-10-03}{Austrian German localization added}
%
%\iffalse
%    \begin{macrocode}
%<*datetime2-de-AT.ldf>
%    \end{macrocode}
%\fi
% Identify Module
%    \begin{macrocode}
\ProvidesDateTimeModule{de-AT}[2017/11/13 v2.1]
%    \end{macrocode}
% Require the basic German module
%    \begin{macrocode}
\RequireDateTimeModule{german}
%    \end{macrocode}
%
%
% Allow the user a way of configuring the "de-AT" and
% "de-AT-numeric" styles. This doesn't use the package wide
% separators such as
% \cs{dtm@datetimesep} in case other date formats are also required.
%
%\begin{macro}{\DTMdeATdowdaysep}
% The separator between weekday and day
%    \begin{macrocode}
\newcommand*{\DTMdeATdowdaysep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeATdaymonthsep}
% The separator between the day and month for the text format.
%    \begin{macrocode}
\newcommand*{\DTMdeATdaymonthsep}{.\DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeATmonthyearsep}
% The separator between the month and year for the text format.
%    \begin{macrocode}
\newcommand*{\DTMdeATmonthyearsep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeATdatetimesep}
% The separator between the date and time blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMdeATdatetimesep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeATtimezonesep}
% The separator between the time and zone blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMdeATtimezonesep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeATdatesep}
% The separator for the numeric date format.
%    \begin{macrocode}
\newcommand*{\DTMdeATdatesep}{-}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeATtimesep}
% The separator for the numeric time format.
%    \begin{macrocode}
\newcommand*{\DTMdeATtimesep}{:}
%    \end{macrocode}
%\end{macro}
%
% Provide keys that can be used in \cs{DTMlangsetup} to set these
% separators.
%    \begin{macrocode}
\DTMdefkey{de-AT}{dowdaysep}{\renewcommand*{\DTMdeATdowdaysep}{#1}}
\DTMdefkey{de-AT}{daymonthsep}{\renewcommand*{\DTMdeATdaymonthsep}{#1}}
\DTMdefkey{de-AT}{monthyearsep}{\renewcommand*{\DTMdeATmonthyearsep}{#1}}
\DTMdefkey{de-AT}{datetimesep}{\renewcommand*{\DTMdeATdatetimesep}{#1}}
\DTMdefkey{de-AT}{timezonesep}{\renewcommand*{\DTMdeATtimezonesep}{#1}}
\DTMdefkey{de-AT}{datesep}{\renewcommand*{\DTMdeATdatesep}{#1}}
\DTMdefkey{de-AT}{timesep}{\renewcommand*{\DTMdeATtimesep}{#1}}
%    \end{macrocode}
%
% 
% Define a boolean key that can switch between full and abbreviated formats for
% the month and day of week names in the text format.
%    \begin{macrocode}
\DTMdefboolkey{de-AT}{abbr}[true]{}
%    \end{macrocode}
%
% The default is full name
%    \begin{macrocode}
\DTMsetbool{de-AT}{abbr}{false}
%    \end{macrocode}
%
% Define a boolean key that determines if the time zone mappings
% should be used.
%    \begin{macrocode}
\DTMdefboolkey{de-AT}{mapzone}[true]{}
%    \end{macrocode}
% The default is to use mappings.
%    \begin{macrocode}
\DTMsetbool{de-AT}{mapzone}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the day of month should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{de-AT}{showdayofmonth}[true]{}
%    \end{macrocode}
% The default is to show the day of month.
%    \begin{macrocode}
\DTMsetbool{de-AT}{showdayofmonth}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the year should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{de-AT}{showyear}[true]{}
%    \end{macrocode}
% The default is to show the year.
%    \begin{macrocode}
\DTMsetbool{de-AT}{showyear}{true}
%    \end{macrocode}
%
%
% Define the "de-AT" style
%    \begin{macrocode}
\DTMnewstyle
{de-AT}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-AT}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
        \DTMdeATdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-AT}{showdayofmonth}%
    {\DTMgermanordinal{##3}\DTMdeATdaymonthsep}%
    {}%
    %
    \DTMifbool{de-AT}{abbr}%
    {\DTMdeATshortmonthname{##2}}%
    {\DTMdeATmonthname{##2}}%
    %
    \DTMifbool{de-AT}{showyear}%
    {%
      \DTMdeATmonthyearsep%
      \number##1 % space intended
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-AT}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
        \DTMdeATdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-AT}{showdayofmonth}%
    {\DTMgermanordinal{##3}\DTMdeATdaymonthsep}%
    {}%
    %
    \DTMifbool{de-AT}{abbr}%
    {\DTMdeATshortmonthname{##2}}%
    {\DTMdeATmonthname{##2}}%
    %
    \DTMifbool{de-AT}{showyear}%
    {%
      \DTMdeATmonthyearsep%
      \number##1 % space intended
    }%
    {}%
  }%
}%
{% time style (use default)
  \renewcommand*\DTMdisplaytime[3]{%
    \DTMtwodigits{##1}%
    \DTMdeATtimesep\DTMtwodigits{##2}%
    \ifDTMshowseconds\DTMdeATtimesep\DTMtwodigits{##3}\fi
  }%
}%
{% zone style
  \DTMresetzones
  \DTMgermanzonemaps
  \renewcommand*{\DTMdisplayzone}[2]{%
    \DTMifbool{de-AT}{mapzone}%
    {\DTMusezonemapordefault{##1}{##2}}%
    {%
      \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
      \ifDTMshowzoneminutes\DTMdeATtimesep\DTMtwodigits{##2}\fi
    }%
  }%
}%
{% full style
  \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
      \DTMdisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeATdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeATtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
  \renewcommand*{\DTMDisplay}[9]{%
    \ifDTMshowdate
      \DTMDisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeATdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeATtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
}%
%    \end{macrocode}
%
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle
{de-AT-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
    \DTMifbool{de-AT}{showyear}%
    {%
      \number##1 % space intended
      \DTMdeATdatesep%
    }%
    {}%
    %
    \DTMtwodigits{##2}%
    %
    \DTMifbool{de-AT}{showdayofmonth}%
    {%
      \DTMdeATdatesep%
      \DTMtwodigits{##3}%
    }%
    {}%
  }%
  \renewcommand*{\DTMDisplaydate}[4]{\DTMdisplaydate{##1}{##2}{##3}{##4}}%
}%
{% time style
  \renewcommand*\DTMdisplaytime[3]{%
    \DTMtwodigits{##1}%
    \DTMdeATtimesep\DTMtwodigits{##2}%
    \ifDTMshowseconds\DTMdeATtimesep\DTMtwodigits{##3}\fi
  }%
}%
{% zone style
  \DTMresetzones
  \DTMgermanzonemaps
  \renewcommand*{\DTMdisplayzone}[2]{%
    \DTMifbool{de-AT}{mapzone}%
    {\DTMusezonemapordefault{##1}{##2}}%
    {%
      \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
      \ifDTMshowzoneminutes\DTMgermantimesep\DTMtwodigits{##2}\fi
    }%
  }%
}%
{% full style
  \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
      \DTMdisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeATdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeATtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
  \renewcommand*{\DTMDisplay}{\DTMdisplay}%
}
%    \end{macrocode}
%
% Switch style according to the \opt{useregional} setting.
%    \begin{macrocode}
\DTMifcaseregional
{}% do nothing
{\DTMsetstyle{de-AT}}%
{\DTMsetstyle{de-AT-numeric}}%
%    \end{macrocode}
%
% Redefine \cs{dategerman} (or \cs{date}\meta{dialect}) to prevent
% \sty{babel} from resetting \cs{today}. (For this to work,
% \sty{babel} must already have been loaded if it's required.)
%    \begin{macrocode}
\ifcsundef{date\CurrentTrackedDialect}
{%
  \ifundef\dategerman
  {% do nothing
  }%
  {%
    \def\dategerman{%
      \DTMifcaseregional
      {}% do nothing
      {\DTMsetstyle{german}}%
      {\DTMsetstyle{german-numeric}}%
    }%
  }%
}%
{%
  \csdef{date\CurrentTrackedDialect}{%
    \DTMifcaseregional
    {}% do nothing
    {\DTMsetstyle{de-AT}}%
    {\DTMsetstyle{de-AT-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%</datetime2-de-AT.ldf>
%    \end{macrocode}
%\fi
%
%
%
%
%
%
%
%
%
%
% \section{Swiss German localization (\texttt{de-CH}, \texttt{datetime2-de-CH.ldf})}
%\changes{2.0}{2017-10-03}{Swiss German localization added}
%\iffalse
%    \begin{macrocode}
%<*datetime2-de-CH.ldf>
%    \end{macrocode}
%\fi
% Identify Module
%    \begin{macrocode}
\ProvidesDateTimeModule{de-CH}[2017/11/13 v2.1]
%    \end{macrocode}
% Require the basic German module
%    \begin{macrocode}
\RequireDateTimeModule{german}
%    \end{macrocode}
%
%
% Allow the user a way of configuring the "de-CH" and
% "de-CH-numeric" styles. This doesn't use the package wide
% separators such as
% \cs{dtm@datetimesep} in case other date formats are also required.
%
%\begin{macro}{\DTMdeCHdowdaysep}
% The separator between weekday and day
%    \begin{macrocode}
\newcommand*{\DTMdeCHdowdaysep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHdaymonthsep}
% The separator between the day and month for the text format.
%    \begin{macrocode}
\newcommand*{\DTMdeCHdaymonthsep}{.\DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHmonthyearsep}
% The separator between the month and year for the text format.
%    \begin{macrocode}
\newcommand*{\DTMdeCHmonthyearsep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHdatetimesep}
% The separator between the date and time blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMdeCHdatetimesep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHtimezonesep}
% The separator between the time and zone blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMdeCHtimezonesep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHdatesep}
% The separator for the numeric date format.
%    \begin{macrocode}
\newcommand*{\DTMdeCHdatesep}{.}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHtimesep}
% The separator for the numeric time format.
%    \begin{macrocode}
\newcommand*{\DTMdeCHtimesep}{.}
%    \end{macrocode}
%\end{macro}
%
% Provide keys that can be used in \cs{DTMlangsetup} to set these
% separators.
%    \begin{macrocode}
\DTMdefkey{de-CH}{dowdaysep}{\renewcommand*{\DTMdeCHdowdaysep}{#1}}
\DTMdefkey{de-CH}{daymonthsep}{\renewcommand*{\DTMdeCHdaymonthsep}{#1}}
\DTMdefkey{de-CH}{monthyearsep}{\renewcommand*{\DTMdeCHmonthyearsep}{#1}}
\DTMdefkey{de-CH}{datetimesep}{\renewcommand*{\DTMdeCHdatetimesep}{#1}}
\DTMdefkey{de-CH}{timezonesep}{\renewcommand*{\DTMdeCHtimezonesep}{#1}}
\DTMdefkey{de-CH}{datesep}{\renewcommand*{\DTMdeCHdatesep}{#1}}
\DTMdefkey{de-CH}{timesep}{\renewcommand*{\DTMdeCHtimesep}{#1}}
%    \end{macrocode}
%
% 
% Define a boolean key that can switch between full and abbreviated formats for
% the month and day of week names in the text format.
%    \begin{macrocode}
\DTMdefboolkey{de-CH}{abbr}[true]{}
%    \end{macrocode}
%
% The default is full name
%    \begin{macrocode}
\DTMsetbool{de-CH}{abbr}{false}
%    \end{macrocode}
%
% Define a boolean key that determines if the time zone mappings
% should be used.
%    \begin{macrocode}
\DTMdefboolkey{de-CH}{mapzone}[true]{}
%    \end{macrocode}
% The default is to use mappings.
%    \begin{macrocode}
\DTMsetbool{de-CH}{mapzone}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the day of month should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{de-CH}{showdayofmonth}[true]{}
%    \end{macrocode}
% The default is to show the day of month.
%    \begin{macrocode}
\DTMsetbool{de-CH}{showdayofmonth}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the year should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{de-CH}{showyear}[true]{}
%    \end{macrocode}
% The default is to show the year.
%    \begin{macrocode}
\DTMsetbool{de-CH}{showyear}{true}
%    \end{macrocode}
%
%
% Define the "de-CH" style
%    \begin{macrocode}
\DTMnewstyle
{de-CH}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-CH}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
        \DTMdeCHdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-CH}{showdayofmonth}%
    {\DTMgermanordinal{##3}\DTMdeCHdaymonthsep}%
    {}%
    %
    \DTMifbool{de-CH}{abbr}%
    {\DTMdeCHshortmonthname{##2}}%
    {\DTMgermanmonthname{##2}}%
    %
    \DTMifbool{de-CH}{showyear}%
    {%
      \DTMdeCHmonthyearsep%
      \number##1 % space intended
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-CH}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
        \DTMdeCHdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-CH}{showdayofmonth}%
    {\DTMgermanordinal{##3}\DTMdeCHdaymonthsep}%
    {}%
    %
    \DTMifbool{de-CH}{abbr}%
    {\DTMdeCHshortmonthname{##2}}%
    {\DTMgermanmonthname{##2}}%
    %
    \DTMifbool{de-CH}{showyear}%
    {%
      \DTMdeCHmonthyearsep%
      \number##1 % space intended
    }%
    {}%
  }
}%
{% time style (use default)
  \renewcommand*\DTMdisplaytime[3]{%
    \DTMtwodigits{##1}%
    \DTMdeCHtimesep\DTMtwodigits{##2}%
    \ifDTMshowseconds\DTMdeCHtimesep\DTMtwodigits{##3}\fi\space%
    Uhr%
  }%
}%
{% zone style
  \DTMresetzones
  \DTMgermanzonemaps
  \renewcommand*{\DTMdisplayzone}[2]{%
    \DTMifbool{de-CH}{mapzone}%
    {\DTMusezonemapordefault{##1}{##2}}%
    {%
      \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
        \ifDTMshowzoneminutes\DTMdeCHtimesep\DTMtwodigits{##2}\fi
    }%
  }%
}%
{% full style
  \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
      \DTMdisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeCHdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeCHtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
  \renewcommand*{\DTMDisplay}[9]{%
    \ifDTMshowdate
      \DTMDisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeCHdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeCHtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
}%
%    \end{macrocode}
%
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle
{de-CH-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-CH}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
		\DTMdeCHdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-CH}{showdayofmonth}%
    {%
      \DTMtwodigits{##3}%
      \DTMdeCHdatesep
    }%
    {}%
    \DTMtwodigits{##2}%
    \DTMdeCHdatesep%
    \DTMifbool{de-CH}{showyear}%
    {%
      \number##1 % space intended
    }%
    {}%
  }%
  \renewcommand*{\DTMDisplaydate}[4]{\DTMdisplaydate{##1}{##2}{##3}{##4}}%
}%
{% time style
  \renewcommand*\DTMdisplaytime[3]{%
    \DTMtwodigits{##1}%
    \DTMdeCHtimesep\DTMtwodigits{##2}%
    \ifDTMshowseconds\DTMdeCHtimesep\DTMtwodigits{##3}\fi\space%
    Uhr%
  }%
}%
{% zone style
  \DTMresetzones
  \DTMgermanzonemaps
  \renewcommand*{\DTMdisplayzone}[2]{%
    \DTMifbool{de-CH}{mapzone}%
    {\DTMusezonemapordefault{##1}{##2}}%
    {%
      \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
      \ifDTMshowzoneminutes\DTMgermantimesep\DTMtwodigits{##2}\fi
    }%
  }%
}%
{% full style
  \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
      \DTMdisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeCHdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeCHtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
  \renewcommand*{\DTMDisplay}{\DTMdisplay}%
}
%    \end{macrocode}
%
% Switch style according to the \opt{useregional} setting.
%    \begin{macrocode}
\DTMifcaseregional
{}% do nothing
{\DTMsetstyle{de-CH}}%
{\DTMsetstyle{de-CH-numeric}}%
%    \end{macrocode}
%
% Redefine \cs{dategerman} (or \cs{date}\meta{dialect}) to prevent
% \sty{babel} from resetting \cs{today}. (For this to work,
% \sty{babel} must already have been loaded if it's required.)
%    \begin{macrocode}
\ifcsundef{date\CurrentTrackedDialect}
{%
  \ifundef\dategerman
  {% do nothing
  }%
  {%
    \def\dategerman{%
      \DTMifcaseregional
      {}% do nothing
      {\DTMsetstyle{german}}%
      {\DTMsetstyle{german-numeric}}%
    }%
  }%
}%
{%
  \csdef{date\CurrentTrackedDialect}{%
    \DTMifcaseregional
    {}% do nothing
    {\DTMsetstyle{de-CH}}%
    {\DTMsetstyle{de-CH-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%</datetime2-de-CH.ldf>
%    \end{macrocode}
%\fi
%
%
%
%
%
%
%
%
%
%
%\Finale
\endinput