[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.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

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

Messaggio da joe »

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 15 mar 2016, 12:01, modificato 1 volta in totale.

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

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

Messaggio da conraid »

Togli il + all'ora aggiunta

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

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

Messaggio da targzeta »

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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

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

Messaggio da joe »

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

Rispondi