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 '18, 13:47 Cletus |
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} beantwortet 04 Mai '18, 17:36 gast3 |