iBaffiPro ha scritto:
Non comprendo bene questo punto. Quando inserisco una data mi accontento che sia successiva alla data di oggi. Per capirci pensa alla data che un comune CMS come WordPress mette ad una nuova news inserita da un utente. Se ti riferisci al fatto che l’ora attuale in Italia, a Tokyo, appartenga già al passato non è un problema.
Il problema di avere "solo" una data nel formato
gg/mm/aaaa hh:mm (con o senza secondi/millisecondi) SENZA avere altre informazioni di contesto, riguarda più che altro una serie di casi particolari tra cui ad esempio il passaggio dall'ora solare a legale.
In Italia l'ora legale inizia l'ultima domenica di Marzo. Che quest'anno vuol dire il giorno 28 Marzo 2021. In quella data si è passati dalle 01:59:59 direttamente alle 03:00:00.
Quindi ad esempio la data/orario "28/03/2021 02:24" in Italia "non esiste". E lo si può provare da codice:
DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm");
df.setTimeZone(TimeZone.getTimeZone("Europe/Rome"));
df.setLenient(false);
Date d = df.parse("28/03/2021 02:24");
System.out.println(df.format(d));
Se provi ad eseguire questo, ti becchi java.text.ParseException: Unparseable date: "28/03/2021 02:24"
Non è un problema di formato/sintassi ... è proprio che quell'orario NON ESISTE!
Nota che il DateFormat ha il lenient=false, ovvero NON è "indulgente". Se lo imposti true, ti accetta la data e la considera "03:24".
Se invece metti un altro fuso orario es. "America/New_York", allora non lancia ParseException, semplicemente perché in QUEL fuso orario questa data/orario locale "esiste".
Tutto questo per dire una cosa molto semplice: se hai solo una data/orario tipo "28/03/2021 02:24" e NON hai altre informazioni di contesto (fuso orario), non puoi davvero sapere se questa data/orario esiste ed è valida.
Quindi dipende appunto da cosa te ne fai solo di una data del genere se non ci associ "altro" di contesto. Se la salvi e la fai rivedere a quello stesso utente, ok, l'utente "sa" che quella data che ha inserito è nel suo fuso orario. Ma non la puoi usare per farci logiche o confronti con altre date-orari.
iBaffiPro ha scritto:
Questo problema l’ho sto sperimentando su IE, sugli altri browser fortunatamente no ma editando l’html sui browser più evoluti posso incorrere nello stesso inconveniente. Quando al posto della data scrivo una stringa a caso, Spring Boot rimanda l’utente alla pagina di errore sconosciuto. Stesso discorso per quando scrivo “ciao” in un tag che dovrebbe restituire un numero. Come gestisco un campo diverso dal normale testo? È scomodo dover impostare tutto come una stringa? Tu con Spring Boot gestisci tutto come una stringa?
Una possibilità sarebbe usare nelle tue pagine la libreria Modernizr (
https://modernizr.co) che fornisce informazioni sul supporto di molte feature di browser/HTML. Se il type="datetime-local" non è supportato, potresti fornire un messaggio all'utente o fare altre logiche per "sistemare" il formato prima del submit.