Ein Befehl soll ein Zeitintervall mit Anfangs- und Endzeitpunkt ausgeben. Der Endzeitpunkt wird als Argument übergeben. Die Länge des Zeitintervalls in Minuten ist als globale Variable gespeichert. Es kommt expl3 zum Einsatz. Wie kann der Anfangszeitpunkt berechnet werden?

Öffne in Overleaf
\documentclass{article}
\usepackage{xparse}
\usepackage{datetime2}

\ExplSyntaxOn

\int_const:Nn \c_meinmodul_dauer_int {20}

\NewDocumentCommand \Zeitintervall {m}
    {
        \str_set:Nx \l_tmpa_str {#1\c_colon_str 00}
        \DTMsavetime{l_meinmodul_endzeit}{\l_tmpa_str}

        Das~Zeitintervall~ist~\int_use:N \c_meinmodul_dauer_int ~
        Minuten~lang~und~dauert~von~<Anfangszeitpunkt>~
        bis~\DTMusetime{l_meinmodul_endzeit}.
    }

\ExplSyntaxOff

\begin{document}

\Zeitintervall{15:10}

\end{document}

gefragt 04 Mai, 07:47

Cletus's gravatar image

Cletus
1.2k2045
Akzeptiert: 73%


Das ist eigentlich simple Mathematik. Im folgenden Beispiel mache ich mir das Leben etwas leichter, indem ich davon ausgehe, dass der Zeitunterschied maximal 24 Stunden beträgt:

Öffne in Overleaf
\documentclass{article}
\usepackage{xparse}
\usepackage{datetime2}

\ExplSyntaxOn

\int_const:Nn \c_meinmodul_dauer_int {20}
\int_new:N \l__meinmodul_hours_int
\int_new:N \l__meinmodul_minutes_int
\int_new:N \l__meinmodul_diffhours_int
\int_new:N \l__meinmodul_diffminutes_int

\NewDocumentCommand \Zeitintervall {m}
    {
        \str_set:Nx \l_tmpa_str {#1\c_colon_str 00}
        \DTMsavetime{l_meinmodul_endzeit}{\l_tmpa_str}
        \int_set:Nn \l__meinmodul_hours_int { \DTMfetchhour {l_meinmodul_endzeit} }
        \int_set:Nn \l__meinmodul_minutes_int { \DTMfetchminute {l_meinmodul_endzeit} }
        \int_set:Nn \l__meinmodul_diffhours_int { \int_eval:n { \c_meinmodul_dauer_int / 60 } }
        \int_set:Nn \l__meinmodul_diffminutes_int { \int_eval:n { \c_meinmodul_dauer_int - \l__meinmodul_diffhours_int * 60 } }
        \int_sub:Nn \l__meinmodul_minutes_int \l__meinmodul_diffminutes_int
        \int_compare:nNnT \l__meinmodul_minutes_int < { 0 }
          { 
            \int_decr:N \l__meinmodul_hours_int
            \int_add:Nn \l__meinmodul_minutes_int { 60 }
          }
        \int_sub:Nn \l__meinmodul_hours_int \l__meinmodul_diffhours_int
        \int_compare:nNnT \l__meinmodul_hours_int < { 0 }
          { \int_add:Nn \l__meinmodul_hours_int { 24 } }
        \str_set:Nx \l_tmpa_str { \int_use:N \l__meinmodul_hours_int \c_colon_str \int_use:N \l__meinmodul_minutes_int \c_colon_str 00}
        \DTMsavetime{l_meinmodul_anfangszeit}{\l_tmpa_str}

        Das~Zeitintervall~ist~\int_use:N \c_meinmodul_dauer_int ~
        Minuten~lang~und~dauert~von~\DTMusetime{l_meinmodul_anfangszeit}~
        bis~\DTMusetime{l_meinmodul_endzeit}.
    }

\ExplSyntaxOff

\begin{document}

\Zeitintervall{15:10}

\end{document}
Permanenter link

beantwortet 04 Mai, 11:36

Ijon%20Tichy's gravatar image

Ijon Tichy
7.2k1919

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×2
×1

Frage gestellt: 04 Mai, 07:47

Frage wurde angeschaut: 116 Mal

Zuletzt aktualisiert: 04 Mai, 11:36