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