# Tempo

**URL:** <https://www.ruby-forum.com/t/tempo/127455>\
**Category:** IT\
**Created:** [January 29, 2008, 12:39pm UTC](https://www.ruby-forum.com/t/tempo/127455 "2008-01-29T12:39:43Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![stefanof](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/aeb1de/32.png) [@stefanof](https://www.ruby-forum.com/u/stefanof)\
**Post date:** [January 29, 2008, 12:39pm UTC](https://www.ruby-forum.com/t/tempo/127455/1 "2008-01-29T12:39:43Z")

</div>

Buon giorno a tutti, ho un piccolo problema, dovuto alla mia  
inesperienza, nella gestione delle ore e minuti. In un applicativo ho un  
evento che si compie in 4 tempi definiti come t1, t2, t3 e t4 tutti  
formattati in HH:MM.  
Il problema Ã¨ fare la differenza tra t1 e t4, tra t2 e t3. I risultati  
devono apparire in due distinte celle (perdonatemi il termine) e  
formattati nuovamente in HH:MM.  
Il problema si complica perchÃ¨ l’evento puÃ² verificarsi al cavallo della  
mezzanotte.  
Se non ho capito male, devo trasformare tutto in minuti (che poi  
memorizzo nel db) , fare la differenza e riformattare il tutto. Avete  
qualche esempio da mostrarmi.

Grazie a tutti  
Stefano

---

<div class="post-metadata">

**Author:** ![stefanof](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/aeb1de/32.png) [@stefanof](https://www.ruby-forum.com/u/stefanof)\
**Post date:** [January 29, 2008, 2:20pm UTC](https://www.ruby-forum.com/t/tempo/127455/2 "2008-01-29T14:20:17Z")

</div>

Stefano F. wrote:

> Buon giorno a tutti, ho un piccolo problema, dovuto alla mia  
> inesperienza, nella gestione delle ore e minuti. In un applicativo ho un  
> evento che si compie in 4 tempi definiti come t1, t2, t3 e t4 tutti  
> formattati in HH:MM.  
> Il problema Ã¨ fare la differenza tra t1 e t4, tra t2 e t3. I risultati  
> devono apparire in due distinte celle (perdonatemi il termine) e  
> formattati nuovamente in HH:MM.  
> Il problema si complica perchÃ¨ l’evento puÃ² verificarsi al cavallo della  
> mezzanotte.  
> Se non ho capito male, devo trasformare tutto in minuti (che poi  
> memorizzo nel db) , fare la differenza e riformattare il tutto. Avete  
> qualche esempio da mostrarmi.
> 
> Grazie a tutti  
> Stefano

Dai un occhio qui  
[https://rubyforge.org/projects/duration/](https://rubyforge.org/projects/duration/)

---

<div class="post-metadata">

**Author:** ![stefanof](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/aeb1de/32.png) [@stefanof](https://www.ruby-forum.com/u/stefanof)\
**Post date:** [January 29, 2008, 2:36pm UTC](https://www.ruby-forum.com/t/tempo/127455/3 "2008-01-29T14:36:57Z")

</div>

On Jan 29, 2008 12:39 PM, Stefano F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> memorizzo nel db) , fare la differenza e riformattare il tutto. Avete  
> qualche esempio da mostrarmi.

Il segreto è trasformare tutte le date nel “numero di secondi a partire da  
una data convenzionale”, che nel mondo Unix è sempre il 1970/1/1 a  
mezzanotte. Dopodiché, tutta l’aritmetica sulle date si riduce a semplice  
aritmetica su interi.

Per esempio:

$ irb  
irb(main):001:0\> Time.new.to\_i  
=\> 1201613758  
irb(main):002:0\> Time.at(1300000000)  
=\> Sun Mar 13 08:06:40 +0100 2011  
irb(main):003:0\>

---

<div class="post-metadata">

**Author:** ![stefanof](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/aeb1de/32.png) [@stefanof](https://www.ruby-forum.com/u/stefanof)\
**Post date:** [January 29, 2008, 2:43pm UTC](https://www.ruby-forum.com/t/tempo/127455/4 "2008-01-29T14:43:01Z")

</div>

Manca qualche informazione.  
Parli di database e di visualizzazione in celle, ma non specifichi il  
tipo dei dati.

Se i tempi li mantieni in oggetti Time, non devi preoccuparti del  
passaggio della mezzanotte, altrimenti (se li mantieni come stringhe  
“HH:MM”) si.

Comunque, dati due Time, t1 e t2, puoi calcolare la loro differenza in  
secondi semplicemente sottraendoli.

secs = t2 - t1

e visualizzarli in “HH:MM”:

puts “%02u:%02u” % [(secs / 3600).to\_i, ((secs / 60) % 60).to\_i]

---

<div class="post-metadata">

**Author:** ![stefanof](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/aeb1de/32.png) [@stefanof](https://www.ruby-forum.com/u/stefanof)\
**Post date:** [January 29, 2008, 2:45pm UTC](https://www.ruby-forum.com/t/tempo/127455/5 "2008-01-29T14:45:47Z")

</div>

Registra i tempi come unix timestamp poi fai le differenze e ottieni i  
secondi intercorsi tra un tempo e l’altro. Poi con qualche ti crei  
qualche funzione per ottenere una stringa tipo HH:MM:SS se ti serve…

Spero di aver capito il problema.

Ciao

---

<div class="post-metadata">

**Author:** ![stefanof](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/aeb1de/32.png) [@stefanof](https://www.ruby-forum.com/u/stefanof)\
**Post date:** [January 29, 2008, 3:09pm UTC](https://www.ruby-forum.com/t/tempo/127455/6 "2008-01-29T15:09:54Z")

</div>

Claudio Petasecca D. wrote:

> Manca qualche informazione.  
> Parli di database e di visualizzazione in celle, ma non specifichi il  
> tipo dei dati.
> 
> Se i tempi li mantieni in oggetti Time, non devi preoccuparti del  
> passaggio della mezzanotte, altrimenti (se li mantieni come stringhe  
> “HH:MM”) si.
> 
> Comunque, dati due Time, t1 e t2, puoi calcolare la loro differenza in  
> secondi semplicemente sottraendoli.
> 
> secs = t2 - t1
> 
> e visualizzarli in “HH:MM”:
> 
> puts “%02u:%02u” % [(secs / 3600).to\_i, ((secs / 60) % 60).to\_i]

… forse ho capito.  
Devo trasformare tutto in secondi.  
Per spiegare meglio, nella mia form ho 4 campi chiamati t1, t2, t3, t4,  
dove inserisco manualmente l’evento ad esempio 12:54, 12:58, 22:16,  
22:22 e altri due campi toff e tla.  
toff Ã¨ uguale a t1-t4 e formattato in hh:mm (non puÃ² superare mai le 12  
ore)e tla Ã¨ uguale a t2-t4 e la stessa formattazione hh:mm.  
Un esempio tipico potrebbe essere l’orario di lavoro di un dipendente.

Intanto grazie per le rapide risposte.

Ciao

Stefano
