Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331

    Problema formattazione date

    Ciao a tutti.
    Ho realizzato questa funzione per ottenere in formato stringa la data corrente:

    codice:
    public static String getCurrentDateStr(String dateFormat) {
    		return new SimpleDateFormat(dateFormat).format(new Date());
    }
    e in ambiente java7 tomcat7 sulla mia macchina locale usando come dateFormat il seguente:

    codice:
    public static String MY_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
    ottengo le date nel seguente formato: 2017-05-19T18:10:00.000+02:00
    provando lo stesso codice su una macchina con java8 tomcat8 invece ottengo la data nel seguente formato: 2017-05-19T07:37:32.137Z e questo mi sta creando problemi.

    Come posso fare per ottenere anche in java8 tomcat8 la data nello stesso formato?

    Grazie a chi mi aiuterà
    Sandro

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da DarthSandr Visualizza il messaggio
    ottengo le date nel seguente formato: 2017-05-19T18:10:00.000+02:00
    provando lo stesso codice su una macchina con java8 tomcat8 invece ottengo la data nel seguente formato: 2017-05-19T07:37:32.137Z
    Non c'entra la versione di Java ma il time zone predefinito che è evidentemente differente.
    Imposta il TimeZone che vuoi sul SimpleDateFormat (la Z nella seconda data indica il time zone UTC mentre nel primo caso presumo che la tua macchina abbia il time zone italiano visto che ora siamo a +2 rispetto a UTC per l'ora legale).


    Quote Originariamente inviata da DarthSandr Visualizza il messaggio
    e questo mi sta creando problemi.
    Solo per sapere, perché dà problemi? Dipende ovviamente da dove usi la data formattata.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331
    Mi da problemi perché la data generata dal server viene letta da un'app che si aspetta un determinato formato.
    Adesso cerco come settare la TimeZone

    Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da DarthSandr Visualizza il messaggio
    Mi da problemi perché la data generata dal server viene letta da un'app che si aspetta un determinato formato.
    Sai esattamente quale è il formato? Tieni presente che mettere lo specificatore X nel formato non è obbligatorio. E tra l'altro ci sono 3 specificatori per il time zone: z Z X (vedi javadoc di SimpleDateFormat).

    Quote Originariamente inviata da DarthSandr Visualizza il messaggio
    Adesso cerco come settare la TimeZone
    setTimeZone() del SimpleDateFormat e per ottenere un TimeZone lo si ottiene dal metodo "factory" statico getTimeZone di TimeZone.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331
    L'app si aspetta una data nel format 2017-05-19T18:10:00.000+02:00 e googleggiando ho visto che il date format corretto dovrebbe essere yyyy-MM-dd'T'HH:mm:ss.SSSXXX

    Al momento ho risolto con setTimeZone(TimeZone.getTimeZone(DEFAULT_TIME_ZONE )); dove DEFAULT_TIME_ZONE è uguale a "Europe/Rome" e le date me le trovo nel formato che mi aspetto.

    Se c'è un modo migliore ben felice di conoscerlo!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da DarthSandr Visualizza il messaggio
    L'app si aspetta una data nel format 2017-05-19T18:10:00.000+02:00 e googleggiando ho visto che il date format corretto dovrebbe essere yyyy-MM-dd'T'HH:mm:ss.SSSXXX

    Al momento ho risolto con setTimeZone(TimeZone.getTimeZone(DEFAULT_TIME_ZONE )); dove DEFAULT_TIME_ZONE è uguale a "Europe/Rome" e le date me le trovo nel formato che mi aspetto.

    Se c'è un modo migliore ben felice di conoscerlo!
    No, non c'è un modo "migliore". Nel senso che se vuoi avere sempre tassativamente un time zone come -OO:MM o +OO:MM, allora l'unico specificatore utile è XXX però stando attenti, la documentazione lo dice chiaramente: For formatting, if the offset value from GMT is 0, "Z" is produced.
    Quindi devi per forza impostare un time zone con offset diverso da 0.

    E Europe/Rome va bene (può essere +1 o +2 a seconda dell'ora solare/legale)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331
    ok, grazie!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.