Newsgroup: it.comp.os.linux.iniziare
Titolo: FOR per loop di date?

Salve a tutti
Come posso fare un FOR che mi "loppi" tutte le date esistenti dal
2006-01-01 al 2007-12-31?Cioe', che tenga conto anche di Febbraio...
Possibilmente utilizzando i potenti mezzi della bash.
Grazie.
 
-- 
I'm using an evaluation license of nemo since 74 days.
You should really try it!
http://www.malcom-mac.com/nemo

 2006-01-01 al 2007-12-31?Cioe', che tenga conto anche di Febbraio...
Guarda un po' se questo funziona: 
d="2006-01-01"
while [ $d != "2007-12-31" ]; do
       d=`date -d "$d +25 hours" '+%F'`;
       // usa $d che è nella forma YYYY-MM-DD
done
Ho messo 25 e non 24 perché mi si incantava giustamente al passaggio
dall'ora legale a quella solare.
-- 
no signature yet

 passaggiodall'ora legale a quella solare.
Grazie, sei stato gentilissimo e funziona alla grande!!!
Prima di metterlo in produzione, voglio capire bene il discorso di
+25; vorrei evitare possibili problemi.
Grazie ancora.


 +25; vorrei evitare possibili problemi.
Per cose serie sarebbe bene fare qualche verifica in più. 
Comunque inizialmente avevo messo "+24 hours" ma mi sono accorto per puro
caso che il loop si bloccava al 29 Ottobre 2006, al 28 Ottobre 2007, al 26
Ottobre 2006 e così via (che se non sbaglio dovrebbero essere proprio le
giorni a cavallo dei quali avviene il cambio tra ora legale e ora
solare, e che quindi sostanzialmente durano 25 ore). Infatti:
$ date -d "2008-10-26 +24 hours"
dom ott 26 23:00:00 CET 2008
Da qui l'idea di usare il +25 (l'ora in più non da fastidio in tutti gli
altri casi perché tanto abbiamo obbligato *date* a fare i calcoli dalla
mezzanotte: 2007-01-01 +25 hours = 2007-01-01 00:00:00 +25 hours =
2007-01-02 01:00:00 = 2007-01-02 ).
Spero di essere stato chiaro e di non aver commesso errori ^_^
-- 
no signature yet

 Spero di essere stato chiaro e di non aver commesso errori ^_^
Spera pure ma, come ti avranno detto alle squole alimentari (sic)
un giorno dura ventiquattro ore; se secondo te un giorno dura 
venticinque ore allora guadagnerai un giorno ogni ventiquattro.
Del resto date e` un comando molto problematico; per usarlo 
correttamente dovresti misurare il tempo al modo Unix, ossia 
in secondi trascorsi dal capodanno del 1970.
Ed avresti sempre problemi col il *secondo* *intercalare*
http://en.wikipedia.org/wiki/Leap_second
 

 ...
Non fare crossposting!

 *secondo* *intercalare* 
http://en.wikipedia.org/wiki/Leap_second
Sono d'accordo per il caso generale ma non per quello preso in questione
in questo thread: non vogliamo considerare il tempo *reale* ma soltanto
costruire in maniera semplice un loop che parta da una data iniziale ad
quella finale. Se anche ci fossero leap-seconds o intere ore
mangiate via da qualche anomalia quantistica non sarebbe rilevante alla
risoluzione del problema.
Tutto questo imho e senza voler generare alcun flame. Ti ringrazio anzi
per il tuo post di risposta critico.
-- 
no signature yet

 risoluzione del problema.
Va bene, il caso proposto funziona, sono stato un po' 
troppo precipitoso nel giudizio ma qui non si tratta di 
effetti del tredicesimo ordine o di anomalie quantistiche.
Considera questo:
$ date -d '31 jul 2007 -1 month'
dom lug  1 00:00:00 CEST 2007
$ date -d '31 mar 2008 -1 month'
dom mar  2 00:00:00 CET 2008
$ date -d '31 oct 2007 -1 month'
lun ott  1 00:00:00 CEST 2007
$ date -d '31 mar 2007 -1 month'
sab mar  3 00:00:00 CET 2007
Questo e` un vero e proprio bug di date.
info date
PS La soluzione suggerita dai manuali per salvaguardarsi 
dal cambiamento dell'ora legale e` adottare il tempo 
universale coordinato settando:
TZ=UTC0