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.3k2549
Akzeptiert: 72%


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.7k11019

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: 388 Mal

Zuletzt aktualisiert: 04 Mai, 11:36