Il 02 novembre 2010 13:34, Giorgio Bompiani <[email protected]> ha scritto:
> Salve a tutti, ho riscontrato la seguente stranezza: > Un mio applicativo, scritto in php e che usa mysql compie alcune operazioni > sulle date. Poiché mysql non le esegue direttamente nelle sue query, per > aggiungere n giorni ad una data prendo dal db questa data in secondi, > aggiungo il numero di secondi dato da n*3600*24 e salvo il risultato nel db, > sempre in secondi. > Fino ad ora ha funzionato tranquillamente, ma poi la settimana scorsa c'era > il cambio di orario ed è risultato che se n è tale da superare la data > fatidica il risultato perde un giorno. Ovviamente al di fuori di questa > situazione le due date differiscono di n giorni cioè se la prima cade di > giovedì e n=7 anche la seconda cade di giovedì. > Sono andato subito a vedere se succede lo stesso problema a marzo con il > cambiamento inverso. Lì tutto bene come sempre. Altra prova che ho fatto è > su un pc Windows dove gira lo stesso applicativo: stesso problema. > Qualche idea in merito (a parte quella che io abbia "le traveggole")? Non vedo perché lo sia... :) Ok, uccidimi... :) Tu quando chiedi una data al sistema lui te la rende come data del calendario più l'ora. Giusto? Bene. A questo punto aggiungerci i secondi ti porta ad una data che è la stessa data + i giorni alla stessa ora. Fin qui tutto a posto. Però questo non tiene conto che ci sono due stonature: i cambi dell'ora. A marzo hai 1 giorno di 23 ore (tiro l'ora avanti), ma questo non gli crea casini, visto che la stessa ora del giorno dopo sarà verosimilmente un'ora più avanti. Se l'ora di riferimento è 00.01, la 1.01 è sempre il giorno dopo, quindi per quello che ti serve non cambia: sei sempre al giorno successivo Ad ottobre, però, quel giorno è di 25 ore e questo lo fa sbarellare: se l'ora di riferimento di cui sopra casca a 00.01, passa alle 23.01, che, sfiga, si traduce nella perdita di un giorno... CVD :) Insomma, è la formula n*3600*(24) che scazza... ;P Ciao, Simone -- Per REVOCARE l'iscrizione alla lista, inviare un email a [email protected] con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a [email protected] To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

