[SOLVED] Comando "date" per incrementare di un'ora

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 2711
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

[SOLVED] Comando "date" per incrementare di un'ora

Messaggioda joe » ven mar 04, 2016 21:34

Considerate il seguente comando.

Codice: Seleziona tutto

date '+%m/%d/%Y %H:%M' --date '04/29/2015 01:00 +1 hour'

In pratica voglio prendere la data 29 aprile 2015 alle ora 1:00 e incrementarla di un'ora.
Mi aspetterei come risultato:

Codice: Seleziona tutto

04/29/2015 02:00

Vi torna?

E invece ecco cosa mi restituisce:

Codice: Seleziona tutto

$ date '+%m/%d/%Y %H:%M' --date '04/29/2015 01:00 +1 hour'
04/29/2015 03:00

Cioè, ha incrementato di 2 ore ...


EDIT:
Spetta un po'....
Vuoi vedere che è l'orario legale?!?!?!?

Sto trafficando con dati del 2015... e vuoi vedere che il comando date sballa proprio quando è cambiata l'ora...

Mi confermate?
Ultima modifica di joe il mar mar 15, 2016 12:01, modificato 1 volta in totale.

Avatar utente
conraid
Staff
Staff
Messaggi: 12953
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: Comando "date" per incrementare di un'ora. Ma sbaglia

Messaggioda conraid » sab mar 05, 2016 8:20

Togli il + all'ora aggiunta

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6469
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Comando "date" per incrementare di un'ora. Ma sbaglia

Messaggioda targzeta » sab mar 05, 2016 9:19

joe ha scritto:EDIT:
Spetta un po'....
Vuoi vedere che è l'orario legale?!?!?!?

Sto trafficando con dati del 2015... e vuoi vedere che il comando date sballa proprio quando è cambiata l'ora...

Mi confermate?

Sì, guarda che succede il 28 e il 29 marzo 2015 (passaggio ora legale):

Codice: Seleziona tutto

date '+%m/%d/%Y %H:%M' --date '03/28/2015 01:00 +1 hour'
03/28/2015 02:00

date '+%m/%d/%Y %H:%M' --date '03/29/2015 01:00 +1 hour'
03/29/2015 03:00


Se non vuoi scherzi, digli che le date sono in UTC e fattele dare in UTC.

Codice: Seleziona tutto

date -u '+%m/%d/%Y %H:%M' --date '03/29/2015 01:00 UTC + 1 hour'
03/29/2015 02:00

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 2711
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Comando "date" per incrementare di un'ora. Ma sbaglia

Messaggioda joe » mar mar 15, 2016 12:00

Rispondo solo ora, perchè poi ho ripiegato su altre soluzioni, simili, ma dapprima usando il python con il modulo datetime, poi sfruttando un modulo chiamato "libdate" in fortran, fa parte del pacchetto "Flibs".

Il problema di bash è che impiega un po' troppo, invece sia con python che in fortran ottengo tutto molto più rapidamente. Inoltre avendo anche altre operazioni da svolgere ho integrato questa procedura direttamente in un modulo fortran che richiamo in un altro programma.

Comunque restando in topic, il tuo suggerimento funziona: bisogna lavorare in UTC, altrimenti il localtime fà strani scherzi come si è visto.

Aggiungo che mi stupisce la velocità di esecuzione dello script python addirittura leggermente superiore al fortran. Potrebbe essere colpa del modulo libdate, magari più lento del corrispondente python "datetime".

Ok, direi che basta così...
Grazie di tutto