Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [MYSQL] Impostare il timezone

    Ola...

    allora vi spiego il problema

    sto sviluppando un programma che usa mysql per salvare i dati, le date sono salvate, perche mi serve maneggarle senza problemi da sotto il programma, in formato unix timestamp
    Ora succede che quando salvo una data in formato unix timestamp usando UNIX_TIMESTAMP(NOW()) da mysql questo la salva e sempre tramite mysql la visualizzo correttamente...ma se visualizzo un timestamp dal mio programma salvato in mysql questo viene visualizzato 2 ore prima.
    Il che è un problema serio :\
    Lo UnixTime è salvato in GMT, non nel timestamp del sistema, per far si che sia una data portabile...il problema è che essendo in europa occidentale il timestamp dovrebbe essere +1 invece mysql lo prende a +2 e non capisco il perché
    Vorrei settare il timestamp a +1 solo che la variabile timestamp, o anche il parametro, quando li setto, mysql mi da errore dicendo che non riconosce la variabile\parametro

    qualcuno di voi ha idee?

    una soluzione è quella di gestire TUTTI i timestamp solo da una parte, ma mi pare una soluzione un po bruttina :\

    ---

    Il timezone corretto dovrebbe essere il CET
    CET -> Central Europe Timezone

    solo che non riesco a metterlo in nessun modo :\
    nel manuale viene specificato che i codici di TimeZone sono dipendendti dal sistema operativo, CET è corretto, ma non va


    PS: sono su win
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  2. #2
    http://twiki.org/cgi-bin/xtra/tzdate?tz=Europe/Rome

    VVoVe: VVoVe:

    dice che il timestamp è +2....xche mai?????? VVoVe:
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Hai provato ad aggiungere "--timezone tua_zona" a mysqld_safe?

  4. #4
    si
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    i timezone, x chi fosse interessato, sono listati qui:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones

    (cercante usando questa path nel registro di sistema)

    ma ancora nn ho capito come capperi usarli
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Originariamente inviato da daniele_dll
    i timezone, x chi fosse interessato, sono listati qui:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones

    (cercante usando questa path nel registro di sistema)

    ma ancora nn ho capito come capperi usarli
    Su windows hai l'apposito menù data-ora. Il fuso orario italiano è GMT +1 (amstedam .. rome. ecc) . Passa automaticamente all'ora legale (+2). Probabile che un timestamp ricavato da un PC italiano con GMT + 1 venga letto con un ora in più da un PC dove non c'è l'ora legale, ad anche viene tradotto nell'ora timestamp sua, ben fosse 6 ore indietro, come a new York.

    Nei registri che hai indicato ci sono le caratteristiche delle varie zone. Scegliendone una dal menù data-ora che trovi nel pannello di controllo applichi la chiave time-zone corrispondente.

    Mysql usa quella data-ora di sistema.


  7. #7
    Originariamente inviato da pierotto
    Su windows hai l'apposito menù data-ora. Il fuso orario italiano è GMT +1 (amstedam .. rome. ecc) . Passa automaticamente all'ora legale (+2). Probabile che un timestamp ricavato da un PC italiano con GMT + 1 venga letto con un ora in più da un PC dove non c'è l'ora legale, ad anche viene tradotto nell'ora timestamp sua, ben fosse 6 ore indietro, come a new York.

    Nei registri che hai indicato ci sono le caratteristiche delle varie zone. Scegliendone una dal menù data-ora che trovi nel pannello di controllo applichi la chiave time-zone corrispondente.

    Mysql usa quella data-ora di sistema.

    bene...allora ricordavo bene...era GMT+1 ^^ allora il +2 è che c'è l'ora legale attiva xora

    danka ^^ sarà un bel casotto trasformare la data in unix timestamp standard leggendo le info direttamente da win ... ma per lavoro questo ed altro ^^

    ciauz
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Originariamente inviato da daniele_dll
    bene...allora ricordavo bene...era GMT+1 ^^ allora il +2 è che c'è l'ora legale attiva xora

    danka ^^ sarà un bel casotto trasformare la data in unix timestamp standard leggendo le info direttamente da win ... ma per lavoro questo ed altro ^^

    ciauz
    Puoi sempre memorizzare la data assoluta con datetime. Quando la prendi fai il processo di traduzione in unix-timestamp che ora fai all'immissione. In questo modo un evento accaduto a mezzogiorno, sarà sempre ... mezzogiorno ovunque lo leggerai. Un unix timestamp memorizzato potrebbe diventare qualunque ora, anche se poi tutte le dateora subiranno lo stesso spiazzamento, avresti date che possono cambiare di giorno, o mese o anno.

    Hai la funzione UNIX_TIMESTAMP(campo). Devi solo fare attenzione al range di data più esteso in datetime che in timestamp.


  9. #9
    Originariamente inviato da pierotto
    Puoi sempre memorizzare la data assoluta con datetime. Quando la prendi fai il processo di traduzione in unix-timestamp che ora fai all'immissione. In questo modo un evento accaduto a mezzogiorno, sarà sempre ... mezzogiorno ovunque lo leggerai. Un unix timestamp memorizzato potrebbe diventare qualunque ora, anche se poi tutte le dateora subiranno lo stesso spiazzamento, avresti date che possono cambiare di giorno, o mese o anno.

    Hai la funzione UNIX_TIMESTAMP(campo). Devi solo fare attenzione al range di data più esteso in datetime che in timestamp.

    ehm...guarda che non è proprio come dici tu...x fare quello che dici c'è da salvare la data in GMT...cosa che fa in auto mysql prima di salvare lo unix timestamp (che ho scoperto essere per standard impostato sullo GMT)
    Uno unix timestamp memorizzato è sempre la stessa ora in tutto il mondo xche è GMT...mentre un date time, impostato normalmente...non sarà valido da nessuna parte...xche ad es in italia xora è GMT+2 ... se salvo GMT+2 e poi un domani devo ripescare una cosa avvenuta ad un certo orario avrò le date diverse!
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Ciao,

    Vedo che la cosa ti interessa. Permettimi di dissentire un'ultima volta.

    La data unix timestamp (parliamo di php/mysql) viene fornita con il time zone impostato nel SO quindi quella dell'orario dell'orologio di sistema. Prova ne sia che per ottenerla in GMT devi usare la funzione gmmktime/gmtime. Giustamente hai osservato che un'ora GMT cioè l'ora di Greenwich, tale è per tutto il globo.

    Un mio evento successo oggi alle ore 10.00 verrà memorizzato in GMT + 7200 sec, come successo alle 12.00, mentre il server di NY dirà nel tradurlo che erano le 12.00 - 14.400 secondi. Cosa inaccettabile se trasmetti notizie. Nota che questa ora locale è anche quella fornita da time(), mktime, date()

    Se invece dico che in Italia alle ore 10.00 è caduto Babbo Natale, Verranno riportate le ore 10.00 in tutto il mondo, magari con la notazione: alle 10.00 ora locale....

    Diciamo che a seconda del tipo di informazione potrebbe essere conveniente l'uso del unix timestamp oppure della data locale esplicita. Per correttezza, quindi, andrebbe sempre espresso il time zone utilizzato oppure lo spiazzamento dell'ora locale rispetto GMT.

    Qui hai un test esemplificativo sul discusso.

    codice:
    echo "
    mktime - ora unix locale
    ";
    echo $ita = mktime (date("H"),date("i"),date("s"),date("m"),date("d"),date("Y"));
    echo date(' + Z - T');
    
    echo "
    
    gmmktime - ora unix GMT
    ";
    echo $gmt = gmmktime (date("H"),date("i"),date("s"),date("m"),date("d"),date("Y"));
    echo gmdate(' + Z - T');
    La risposta che ottieni è:

    mktime - ora unix locale
    1092128775 + 7200 - ora legale Europa occidentale

    gmmktime - ora unix GMT
    1092135975 + 0 - GMT Standard Time

    Quindi per ottenere quanto hai supposto in precedenza dovresti utilizzare sempre l'ora GMT per la portabilità tra time zone. Le funzioni php hanno lo stesso comportamento sia in UNIX che in WIN (xp 2000).

    Ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.