Robitex's Blog

Ideas in the web

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.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: