Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Parsing tra data e ora in json e data e ora in java

    Buona sera a tutti, ho un problema con una richiesta http.post eseguita da una pagina html, a web service java. Nei dati passati alla richiesta ho inserito data e ora nel formato "YYYY-mm-dd"Thh:mm:00.000+0000"

    Una volta che la richiesta arriva lato java tuttavia vengono aggiunte due ore.

    Il parsing dei dati è fatto utilizzando le notazioni:

    @JsonIgnoreProperties(ignoreUnknown = true)
    @JsonNaming(PropertyNamingStrategy.PascalCaseStrategy.class)

    La data così come i minuti rimangono invariati.

    Vi ringrazio

    Francesco


  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da francescolomba Visualizza il messaggio
    Nei dati passati alla richiesta ho inserito data e ora nel formato "YYYY-mm-dd"Thh:mm:00.000+0000"

    Una volta che la richiesta arriva lato java tuttavia vengono aggiunte due ore.
    Precisa innanzitutto alcune cose: quale è il tipo di dato mappato? Un java.util.Date? O altro? E poi: il parsing viene fatto in modo completo cioè riconoscendo correttamente quel +0000 (che è l'offset dal UTC)?

    Perché se hai quel formato, è "completo", perché c'è anche l'offset. Quindi se lo mappi in un java.util.Date è presumibilmente sicuramente corretto cioè rappresenta esattamente quell'istante. Il fatto che ti stampa +2 ore è solo per il fatto (ripeto, presumendo sia un java.util.Date) che il toString() di Date formatta la data nel fuso orario della tua macchina locale.
    "Non vuol dire nulla" se non c'è un motivo valido per stamparlo in quel modo. Se è parsato correttamente, l'istante contenuto nel Date è corretto. Stop. Il resto è solo questione di come poi lo formatti (e con quale classe, es. SimpleDateFormat) e con/in quale TimeZone.

    Se vuoi comprenderlo meglio, se io eseguo ora questo codice:
    codice:
    java.util.Date d = new java.util.Date();
    System.out.println(d.toString());
    System.out.println(d.getTime());

    L'output che vedo in questo momento è:

    Mon May 20 20:46:01 CEST 2019
    1558377961842

    Vedi che l'ora è quella locale di adesso (sono le 20 e 46). Ma se prendi l'istante (1558377961842) e lo metti su https://www.epochconverter.com noti che mostra GMT: Monday 20 May 2019 18:46:01.842

    L'istante del tempo è in GMT mentre il toString() è nel fuso orario locale.
    Quindi se per quella forma "YYYY-mm-dd"Thh:mm:00.000+0000" hai l'istante corretto mappato. Stop, è corretto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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.