Robitex's Blog

Ideas in the web

Archivi Mensili: luglio 2013

Differenza di orari in TeX


Ciao,
in questo assolato e caldo meriggio d’estate, vi presento problema e soluzione di un caso particolare che forse a questo punto vi incuriosirà.

Differenza di orari

Dovendo compilare un report, non potevo certo non farlo con LaTeX ed allora mi son trovato il problema di calcolare diverse differenze orarie. Per esempio tra le 10:25 e le 11:40 sono trascorse un’ora e quindici minuti, alias 1:15.

Torna comodo scrivere una macro con argomenti delimitati — visto come sono TeXnico? — che calcoli i minuti trascorsi dalla mezzanotte per ciascun orario, esegua la differenza e riconverta il risultato nel formato ore:minuti.

Ecco il codice da compilare con pdflatex ovviamente:

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

% contatori di minuti
\newcount\mi
\newcount\mii

% determina la differenza oraria
\def\timediff(#1:#2-#3:#4){%
% mii contiene i minuti dell'orario di uscita
\mii=#3
\multiply\mii by 60
\advance\mii by #4
% mi contiene i minuti dell'orario di entrata
\mi=#1
\multiply\mi by 60
\advance\mi by #2
% mii contiene il numero dei minuti effettuati
\advance\mii by -\mi
\mi=\mii
\divide\mii by 60
\the\mii:%
\multiply\mii by 60
\advance\mi by -\mii
\ifnum\mi<10
    0%
\fi
\the\mi
}

\begin{document}
Tra le 14:35 e le 18:38 abbiamo: \timediff(14:35-18:38).
\end{document}

Se poi devo arrotondare alla mezz’ora per difetto?

Tranquilli, niente panico (cit.), è sufficiente

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

% contatori di minuti
\newcount\mi
\newcount\mii

% determina la differenza oraria
% con l'arrotandamento alla mezz'ora
% per difetto
\def\timediff(#1:#2-#3:#4){%
% mii contiene i minuti dell'orario di uscita
\mii=#3
\multiply\mii by 60
\advance\mii by #4
% mi contiene i minuti dell'orario di entrata
\mi=#1
\multiply\mi by 60
\advance\mi by #2
%% mii contiene il numero dei minuti effettuati
\advance\mii by -\mi 
%% mii contiene il numero delle mezz'ore
\divide\mii by 30 
%
\ifodd\mii
    \mi=3
\else
    \mi=0
\fi
%% mii contiene il numero delle ore
\divide\mii by 2
\the\mii:\the\mi 0%
}

\begin{document}
Tra le 14:35 e le 18:38 abbiamo: \timediff(14:35-18:38).
\end{document}

Una volta tanto finisco prima — non vi farò l’esempio della soluzione equivalente in LaTeX3 od in LuaTeX, questo passa il convento e dovrete accontentarvi.
Ok, allora a voi la parola con un classico…
Alla prossima.
R.

Annunci
%d blogger hanno fatto clic su Mi Piace per questo: