Ciao a tutti. Oggi vi mostriamo la seconda parte di come calcolare un intervallo temporale nella tabella degli attributi in QGIS, esprimendo la durata in giorni, ore e minuti. Chi ha letto il precedente post (o visto il video), sa che stiamo rispondendo ad una domanda che ci hanno fatto sul canale. Nel primo post abbiamo mostrato come formattare i campi data e ora finalizzati al calcolo di un intervallo temporale. Oggi invece vediamo proprio come calcolare l’intervallo temporale.
1. L’espressione complessiva per calcolare un intervallo temporale con QGIS in giorni, ore, minuti
Come abbiamo già fatto nel precedente post, per cominciare, buttiamo lì l’espressione da usare, che poi commenteremo passo passo. Vediamo però prima come inserirla e il risultato che restituisce.
L’espressione è questa:
floor (day (“END”-“START”)) || ‘g ‘ || floor (hour( “END”-“START”)%24) || ‘h ‘ || (( minute( “END”-“START”) %1440) % 60) ||’m’
Apriamo il calcolatore di campi dalla tabella degli attributi del file Intervallo, selezioniamo Aggiorna campo esistente e selezioniamo il campo durata. Ti ricordiamo che il risultato desiderato era un intervallo di tempo espresso in giorni, ore e minuti. Nella sezione dedicata all’espressione inseriamo la nostra e clicchiamo su OK. Et voila, abbiamo ottenuto l’intervallo temporale desiderato.
2. Spiegazione dell’espressione
Per prima cosa calcoliamo i giorni presenti nell’intervallo temporale incluso tra il campo END e il campo START e lo facciamo con la funzione day (), che permette di calcolare, appunto, una durata in giorni. Noi però vogliamo una durata intera, senza virgola, sempre approssimata per difetto, quindi racchiuderemo la funzione day() all’interno della funzione floor () già vista.
Concateniamo il valore relativo al numero di giorni, con l’aiuta della doppia barra, che fa da sostituto alla funzione concatenate() alla g di giorno ed uno spazio.
Adesso dobbiamo calcolare le ore residue. La funzione hour () è simile alla funzione day (), ma calcola le ore che passano in un intervallo temporale, nel nostro caso tra il campo END e il campo START. Tuttavia, il risultato si riferisce a tutte le ore dell’intervallo END-START. Noi invece vogliamo solo le ore residue.
Ecco un esempio del ragionamento che noi abbiamo seguito: immaginiamo di avere una durata totale, ad esempio, di 25 ore. Dividendo per 24, ovvero il numero di ore in una giornata, otteniamo che il risultato della divisione mi dà il numero di giorni, invece il resto della divisione mi restituisce le ore residue. Quindi dobbiamo usare l’operatore %, che mi permette di calcolare proprio il resto di una divisione. E ci interessa la parte intera, non decimale di questa operazione, quindi utilizzo l’espressione floor() già vista, che arrotonda per difetto.
Alla durata in ore residue concateniamo la lettera h che sta per ore e il solito spazio che consentirà una maggiore leggibilità della stringa.
Infine calcoliamo i minuti residui. Lo facciamo con due funzioni: la funzione minute(), che, a ormai lo avete capito anche voi, ti calcola l’intera durata tra END e START in minuti e la funzione resto (%) che conosciamo già, usando come dividendo prima 1440, ovvero il numero di minuti in un giorno, e poi di nuovo 60, cioè il numero di minuti in un’ora. Il resto di queste due operazioni mi darà i minuti residui della durata.
Per completare concateniamo la m di minuti.
Abbiamo quindi ottenuto la nostra espressione finale.
Come al solito vi diciamo che sicuramente ci sono altri modi per risolvere questo problema, e se ne avete uno migliore e volete condividerlo con tutti noi ne saremo contenti.
Bene, questo post è finito. Se ti è piaciuto condividilo! Hai dubbi o suggerimenti? Lascia pure un commento.
Puoi vedere anche il nostro video su YouTube “Q&A#2. Calcolare un intervallo temporale con QGIS in giorni, ore, minuti (parte II)” e iscriverti al nostro canale.
Ciaooo