Stampare la data nel formato corretto

di il
12 risposte

Stampare la data nel formato corretto

Come faccio a stampare la data nel formato:

Venerdì 10 Luglio 2015 ore hh:mm:ss?

ho provato in questo modo

GregorianCalendar calendario = new GregorianCalendar ();
Date dataStr = calendario.getTime();
labelData.setText("Data: " + dataStr);

ma me la stampa in inglese.

Ho provato con

SimpleDateFormat sdf = new SimpleDateFormat();
String dataStr = sdf.format(new Date());
Locale.setDefault(Locale.ITALY);

ma mi stampa solo 10/07/2015

come faccio ad ottenere quello che voglio io?

12 Risposte

  • Re: Stampare la data nel formato corretto

    CRTVLB ha scritto:


    Date dataStr = calendario.getTime();
    labelData.setText("Data: " + dataStr);

    ma me la stampa in inglese.
    Il toString() di java.util.Date fornisce un formato fisso e in lingua inglese. Quello non si può cambiare. Infatti va bene solo per logging, debugging o cose del genere.

    CRTVLB ha scritto:


    SimpleDateFormat sdf = new SimpleDateFormat();
    String dataStr = sdf.format(new Date());
    Locale.setDefault(Locale.ITALY);

    ma mi stampa solo 10/07/2015

    come faccio ad ottenere quello che voglio io?
    SimpleDateFormat, specificando un pattern ben preciso che vuoi.
    In alternativa un DateFormat da uno dei metodi "factory" in DateFormat ma va bene solo se accetti il formato convenzionale per quel certo Locale e/o stile.
  • Re: Stampare la data nel formato corretto

    Ok, ho fatto con un pattern in questo modo

    SimpleDateFormat data = new SimpleDateFormat("EEEEEEEEE dd-MMMMMMMMM-yyyy");
    String data1 = data.format(new Date());
    SimpleDateFormat ora = new SimpleDateFormat("HH:mm:ss");
    String orario = ora.format(new Date());
    Locale.setDefault(Locale.ITALY);
    labelData.setText("Data: " + data1+ " " + "orario:"+ orario);

    funziona. Ora un'altra cosa. Se invece volessi vedere l'orario che va avanti?

    cioè nel senso io ora visualizzo l'orario ma se rimando fermo sulla finestra l'orario rimane sempre il primo visualizzato, come faccio a far si che ore, minuti e secondi vadano avanti?
  • Re: Stampare la data nel formato corretto

    CRTVLB ha scritto:


    SimpleDateFormat data = new SimpleDateFormat("EEEEEEEEE dd-MMMMMMMMM-yyyy");
    Innanzitutto sappi che non serve mettere es. 9 ripetizioni della lettera di formato. La documentazione è molto chiara:
    Text: For formatting, if the number of pattern letters is 4 or more, the full form is used
    Quindi ne bastano almeno 4 per la avere la forma completa es. MMMM per avere "Luglio" in italiano.

    CRTVLB ha scritto:


    String data1 = data.format(new Date());
    SimpleDateFormat ora = new SimpleDateFormat("HH:mm:ss");
    String orario = ora.format(new Date());
    Sappi, se non ci hai pensato, che se vuoi formattare data e ora separatamente, è bene partire dallo stesso oggetto Date ... non due distinti. Capitasse mai che il tutto avvenga a cavallo tra 2 giorni e la formattazione della data avviene nel giorno precedente e la formattazione dell'ora nel giorno successivo. Caso estremo, certo, ma un buon programmatore ci pensa ....

    CRTVLB ha scritto:


    Ora un'altra cosa. Se invece volessi vedere l'orario che va avanti?
    Dipende dove vuoi mostrare tale "orologio", comunque serve un sistema di "temporizzazione" (un timer).

    Se in una GUI grafica Swing, è sufficiente usare javax.swing.Timer. Preferibilmente con un intervallo minore del secondo, in modo da visualizzare correttamente il cambio di secondo.
  • Re: Stampare la data nel formato corretto

    andbin ha scritto:


    Innanzitutto sappi che non serve mettere es. 9 ripetizioni della lettera di formato. La documentazione è molto chiara:
    Text: For formatting, if the number of pattern letters is 4 or more, the full form is used
    Quindi ne bastano almeno 4 per la avere la forma completa es. MMMM per avere "Luglio" in italiano.
    Ok questo è chiaro

    andbin ha scritto:


    Sappi, se non ci hai pensato, che se vuoi formattare data e ora separatamente, è bene partire dallo stesso oggetto Date ... non due distinti. Capitasse mai che il tutto avvenga a cavallo tra 2 giorni e la formattazione della data avviene nel giorno precedente e la formattazione dell'ora nel giorno successivo. Caso estremo, certo, ma un buon programmatore ci pensa ....
    Qui un po' meno chiaro

    io vorrei che la data fosse stampata in questo formato:

    Data: Venerdi 10-Luglio-2015 Orario 17:16 come faccio a far cio a far cio con lo stesso Oggeto Date?

    andbin ha scritto:


    Ora un'altra cosa. Se invece volessi vedere l'orario che va avanti?
    Dipende dove vuoi mostrare tale "orologio", comunque serve un sistema di "temporizzazione" (un timer).

    Se in una GUI grafica Swing, è sufficiente usare javax.swing.Timer. Preferibilmente con un intervallo minore del secondo, in modo da visualizzare correttamente il cambio di secondo.
    Dopo aver stampato la data in quel formato, vorrei che l'orario andasse avanti. Quindi se non ho capito male il mio approccio è sbagliato dovrei usare direttamente un timer per visualizzare l'orario giusto?
  • Re: Stampare la data nel formato corretto

    CRTVLB ha scritto:


    Qui un po' meno chiaro

    io vorrei che la data fosse stampata in questo formato:

    Data: Venerdi 10-Luglio-2015 Orario 17:16 come faccio a far cio a far cio con lo stesso Oggeto Date?
    Nel tuo codice sopra, istanzi 2 Date differenti. Sono due istanti leggermente diversi e, nel caso peggiore/estremo, possono essere di due giorni diversi!!

    Ti ho solo detto di usare un singolo Date, istanzialo, assegnalo ad una variabile locale e passalo ai due format() dei due SimpleDateFormat. Tutto qui.
    E ti ripeto, è solo per quel caso davvero "estremo".

    CRTVLB ha scritto:


    Dopo aver stampato la data in quel formato, vorrei che l'orario andasse avanti. Quindi se non ho capito male il mio approccio è sbagliato dovrei usare direttamente un timer per visualizzare l'orario giusto?
    Un timer fa solo eseguire un pezzo di codice ogni "tot" di tempo. Cosa fa il codice è compito tuo.
    Quindi nel codice ogni tot di tempo: prendi la data, formatti, visualizzi dove vuoi.

    Vedi es. il mio Java Example: Digital Clock
  • Re: Stampare la data nel formato corretto

    Allora vediamo di risolvere una cosa alla volta

    se non ho capito male dovrei fare cosi:
    
    public aggiornaData() {
            SimpleDateFormat data = new SimpleDateFormat("EEEE dd-MMMM-yyyy HH:mm:ss");
            String data1 = data.format(new Date());
            Locale.setDefault(Locale.ITALY);
            labelData.setText("Data: " + data1);
    }
    
    giusto?

    solo che poi dopo la data non mi stampa orario:18:45 ma solo 18:45
  • Re: Stampare la data nel formato corretto

    CRTVLB ha scritto:


    solo che poi dopo la data non mi stampa orario:18:45 ma solo 18:45
    A parte il fatto che nel pattern per SimpleDateFormat puoi mettere delle parti "letterali" (non interpretate per le lettere di formato) e quindi potresti sfruttarlo. È ben documentato, vedi javadoc di SimpleDateFormat.

    Il problema comunque non è fare 2 format separati (uno per la data e uno per l'orario). Questo puoi tranquillamente farlo, non capisco il tuo dubbio. Non è questa la questione. Ti ho solo detto, e lo ripeto, di usare un singolo oggetto Date .... non 2.
  • Re: Stampare la data nel formato corretto

    Ho fatto in questo modo, dimmi se va bene

    public void aggiornaData() {
    SimpleDateFormat giorno = new SimpleDateFormat("EEEE dd-MMMM-yyyy");
    SimpleDateFormat ora = new SimpleDateFormat("HH:mm:ss");
    Date d = new Date();
    Locale.setDefault(Locale.ITALY);
    labelData.setText("Data: " + giorno.format(d) +" " + "Orario:" +" " + ora.format(d));
    }

    ottengo quello che voglio e mi sembra si usare un solo oggetto Date, giusto?
  • Re: Stampare la data nel formato corretto

    CRTVLB ha scritto:


    ottengo quello che voglio e mi sembra si usare un solo oggetto Date, giusto?
    Sì, in questo senso è corretto.

    Tieni solo presente che

    Locale.setDefault(Locale.ITALY);

    imposta il Locale in modo "globale" nella applicazione. Se è questo che vuoi, sarebbe meglio farlo una volta sola, all'inizio, es. nel main.
    Se vuoi puoi impostare il Locale in modo più specifico ai due SimpleDateFormat, c'è il costruttore apposito:

    SimpleDateFormat(String pattern, Locale locale)
  • Re: Stampare la data nel formato corretto

    andbin ha scritto:



    Tieni solo presente che

    Locale.setDefault(Locale.ITALY);

    imposta il Locale in modo "globale" nella applicazione. Se è questo che vuoi, sarebbe meglio farlo una volta sola, all'inizio, es. nel main.
    Ok grazie, siccome mi serve in tutta l'applicazione l'ho impostato in modo globale.

    Ora veniamo alla parte più difficile:

    Ovviamente quando chiamo il metodo aggiornaDAta(); mi viene stampata la data nel formato da me scelto in una finestra. Siccome da quando apro la finestra a quando magari effettua un'azione potrebbero passare dei secondi o anche molti minuti, come faccio a far si che la data vada avanti nel tempo.

    Ho visto il tuo codice ma non capisco come posso adattarlo al mio metodo aggiornaData();
  • Re: Stampare la data nel formato corretto

    CRTVLB ha scritto:


    Ho visto il tuo codice ma non capisco come posso adattarlo al mio metodo aggiornaData();
    Guarda la istanziazione del javax.swing.Timer. La implementazione del ActionListener l'ho fatta come anonymous inner class (ma si può fare anche diversamente, non è quello il punto). Nel actionPerformed fai quello che vuoi (prendi data, formatti ecc..).

    Nel mio esempio ho solamente fatto una logica in più per verificare in modo più accurato quando si passa da un secondo all'altro, per non fare set inutili.
  • Re: Stampare la data nel formato corretto

    Ok, grazie mille. Ci provo e poi ti faccio sapere.
Devi accedere o registrarti per scrivere nel forum
12 risposte