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

    Problema con parsing data

    ciao!

    ricevo una data in questo formato:
    codice:
    mar ago 02 05:29:10 +02:00 2016
    ho provato a fare il parsing così, ma ovviamente va in eccezione:
    codice:
    DateFormat df = new SimpleDateFormat("MMMM d, yyyy", Locale.ITALIAN);
    Date date = df.parse(map.get("File Modified Date"));
    secondo voi come posso parsare quella data??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ricevo una data in questo formato:
    codice:
    mar ago 02 05:29:10 +02:00 2016
    Mah ... una data un po' "inusuale" come formato ..... comunque:

    codice:
    String str = "mar ago 02 05:29:10 +02:00 2016";
    System.out.println(str);
    
    DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss XXX yyyy", Locale.ITALIAN);
    Date d = df.parse(str);
    
    System.out.println(df.format(d));

    Stringa iniziale e poi riformattata combaciano.


    P.S. "EEE MMM dd HH:mm:ss XXX yyyy" da specifiche di SimpleDateFormat
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    ciao andbin!

    si il formato in effetti è strano.
    ma lo estrae una libreria dai dati di una immagine (metadata-extractor).

    cmq non mi è molto chiara una cosa.
    il tuo esempio funziona perfettamente, ma se cambio anche solo una scemenza non funziona più.
    ad esempio levo una M:
    codice:
    DateFormat df = new SimpleDateFormat("EEE MM dd HH:mm:ss XXX yyyy", Locale.ITALIAN);
    se io volessi evere una rappresentazione della data più "pulita", ad esempio 01/01/2018?
    ho provato banalmente così, ma non ha funzionato:
    codice:
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy", Locale.ITALIAN);

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fermat Visualizza il messaggio
    si il formato in effetti è strano.
    ma lo estrae una libreria dai dati di una immagine (metadata-extractor).
    Ma giusto per capire: tu ricevi una stringa ... o un oggetto es. Date o altro che rappresenta l'istante?

    Perché la forma curiosamente è la stessa del toString() di java.util.Date

    Quindi, quel map.get("File Modified Date") che tipo di oggetto restituisce? Un String? (allora sì, devi parsare) Un Date? (allora no, non devi parsare nulla)

    Quote Originariamente inviata da fermat Visualizza il messaggio
    cmq non mi è molto chiara una cosa.
    il tuo esempio funziona perfettamente, ma se cambio anche solo una scemenza non funziona più.
    ad esempio levo una M:
    Ripeto, che ci sono delle specifiche ben dettagliate per SimpleDateFormat.

    Month: If the number of pattern letters is 3 or more, the month is interpreted as text; otherwise, it is interpreted as a number.

    Quindi MMM permette di parsare "ago" (per Agosto in italiano) mentre MM sarebbe solo in grado di parsare 8 o 08 per "Agosto".

    Se ricevi una stringa, non puoi mettere un pattern qualunque. Devi mettere il pattern che corrisponde/combacia con la forma.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    è un String.
    ma il discorso è che a prescindere che sia un Date o uno String, volevo cambiare il formato da visualizzare.
    volevo renderlo più leggibile.
    ma se ho capito bene non si può fare.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fermat Visualizza il messaggio
    è un String.
    ma il discorso è che a prescindere che sia un Date o uno String, volevo cambiare il formato da visualizzare.
    volevo renderlo più leggibile.
    ma se ho capito bene non si può fare.
    Certo che si può fare!
    Se ricevi un String (e nient'altro) lo devi prima parsare con un SimpleDateFormat con il pattern appropriato e corrispondente. Quindi ottieni un Date. E poi questo Date lo puoi ri-formattare in stringa con un altro SimpleDateFormat con un altro pattern a tua scelta.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    ok, ho fatto così e sembra funzionare:

    codice:
    DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss XXX yyyy", Locale.ITALIAN);
    Date date = df.parse(map.get("File Modified Date"));
    DateFormat df2 = new SimpleDateFormat("dd/MM/yyy", Locale.ITALIAN);
    String dateFormat = df2.format(date);
    System.out.println(dateFormat);
    grazie!!

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ok, ho fatto così e sembra funzionare
    Sì, ok. Solo una piccola osservazione: nel formato iniziale il timezone è esplicito (quel +02:00) ma quando ri-formatti con il secondo SimpleDateFormat, il timezone usato è quello di "default" della JVM in esecuzione, che potrebbe essere ovviamente differente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    si ho notato.

    però l'orario al momento non mi interessa.
    diciamo che è un dato indicativo, giusto per dare qualche info sull'immagine che si sta visualizzando!

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.