Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20

Discussione: [Java] Formattare data

  1. #1

    Formattare data

    Salve,
    mi trovo a dover formattare una data sottoforma di "2007-12-04 14:22:35"
    cioè nel formato standard che ritorna la chiamata System.currentTimeMillis().
    Il problema è che dovrei modificare tale data per poter fare alcune query sul DB,
    ho prvato in tutti i modi, ma la difficoltà che ho trovato è che dovrei ottenere come risultato finale un oggetto di tipo DATE(sql o util va bene lo stesso) oppure LONG.
    Ad esempio utilizzando SimpleTypeFormat ottengo una stringa che non è convertibile a sua volta.

    Una buona cosa sarebbe utilizzare GregorianCalendar che mi permette di modificare la data come voglio, ma, prendendo come esempio questo:
    Calendar cal = new GregorianCalendar();
    cal.set( cal.YEAR, 2005);
    cal.set( cal.MONTH, cal.JANUARY );
    cal.set( cal.DATE, 4 );

    cal.set( cal.HOUR_OF_DAY, 10 );
    cal.set( cal.MINUTE, 33);
    cal.set( cal.SECOND, 12 );
    cal.set( cal.MILLISECOND, 0 );

    java.sql.Date jsqlD = new java.sql.Date( cal.getTime().getTime() );


    1. non ho trovato il modo per settare YEAR, MONTH ecc.. utilizzando qualche metodo dinamico, cioè qualcosa che ad es. mi restituisca il risultato da calendario dell'anno o il mese attuale meno qualcosa che definisco io.
    2. non sono riuscito a formattare la data nel formato "2007-12-04 14:22:35", ma solo 2007-12-04"

    Mi sono dilungato un pò, ma spero di aver chiarto al meglio la faccenda..

    Grazie mille!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Domanda posta un migliaio di volte, circa.
    Una ricerca nel forum, per aiutarti usa "SimpleDateFormat" come chiave di ricerca.

    Puoi anche dare un'occhiata a questo articolo: Lavorare con date e ore in Java.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    mmmm, mi sà che non hai nemmeno letto il mio post...


  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da TommyGun
    mmmm, mi sà che non hai nemmeno letto il mio post...
    No, mi sa che non ti è affatto chiaro quali siano le classi e i metodi da usare per poter operare con le date ....

    Per formattare/parsare una stringa che rappresenta una data si usa java.text.DateFormat (o eventualmente la sua sottoclasse java.text.SimpleDateFormat se si vuole usare un formato personalizzato).

    Per poter compiere operazioni sui singoli campi di una data (impostazione, lettura, addizione, ecc...) si usa un java.util.Calendar o la sua sottoclasse più specifica java.util.GregorianCalendar.

    La classe java.util.Date rappresenta un preciso istante nel tempo con una precisione del millisecondo. Molti dei suoi costruttori/metodi sono deprecati e al giorno d'oggi viene usata principalmente per fare da "ponte" tra un "Calendar" e un "DateFormat".

    La documentazione javadoc è chiara e ti fornisce tutte le informazioni per operare con queste classi. E andrebbe sempre consultata.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Scusate ma ho pensato questo solo perchè la risposta non mi sembrava adeguata al mio dubbio,
    ma forse non sono stato molto chiaro nel mio post troooooppo lungo.
    Diciamo che il problema principale è che facendo:

    Codice PHP:
                    SimpleDateFormat formatter =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            
    Date datas null;
            try {
                        
    datas formatter.parse("2007-12-05 10:32:42");
            }
            catch (
    ParseException e) {
                
    System.out.println("ERRORE stringToDate");
            } 
    ottengo sempre errore e quindi non sò come ottenere alla fine una data ben formattata in un oggetto Date.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da TommyGun
    ottengo sempre errore e quindi non sò come ottenere alla fine una data ben formattata in un oggetto Date.
    Il codice che hai postato è corretto e funziona senza lanciare alcuna eccezione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    oooops scusate ma sono fuso!

    un ultima cosa, come potrei ora settare la stringa data in modo da ottenere ad esempio precisamente un mese fà, ieri, ecc.. ho provato utilizzando Calendar ma non riesco a fargli settare tutto dinamicamente, ad esempio:
    Codice PHP:
        Calendar cal Calendar.getInstance();
            
        
    cal.setcal.YEAR, (ANNO_ATTUALE QUALCOSA)  );
        
    cal.setcal.MONTH, (MESE_ATTUALE QUALCOSA)  );
        
    cal.setcal.DATE, (GIORNO_ATTUALE QUALCOSA)  );
        
        
    cal.setcal.HOUR_OF_DAYORA_ATTUALE );
        
    cal.setcal.MINUTEMINUTI_ATTUALI );
        
    cal.setcal.SECOND);
        
    cal.setcal.MILLISECOND); 
    Grazie di nuovo

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Anche a questo trovavi risposta nel mio articoletto: si usano i metodi add() oppure roll() della classe Calendar, che servono ad aggiungere algebricamente una quantità ad un determinato campo. Aggiungere algebricamente significa che se si aggiunge un valore negativo, esso viene tolto.

    add() aggiunge (o toglie) coerentemente, facendo incrementare o decrementare a dovere anche i campi di più alto ordine (aggiungendo 1 al giorno del 31/12/1999 si arriva al 01/01/2000).

    roll() aggiunge (o toglie) coerentemente, senza incrementare i campi di ordine più alto (nell'esempio sopra, usando roll si ritorna al 01/01/1999).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Ok ti ringrazio veramente per la tua precisa risposta.

    Ecco qua il risultato finale:

    Codice PHP:
                   Date dataStart null;
                            
    Date dataEnd null;                  
                           
                             
                            
    Calendar calStart Calendar.getInstance();
                            
    Calendar calEnd Calendar.getInstance(); 
     
                            
    calStart.setcalStart.YEARcalStart.get(Calendar.YEAR));
                            
    calStart.setcalStart.MONTHcalStart.get(Calendar.MONTH));
                            
    calStart.setcalStart.DATEcalStart.get(Calendar.DATE)-);
                            
    calStart.setcalStart.HOUR_OF_DAY16 );
                            
    calStart.setcalStart.MINUTE33 );
                            
    calStart.setcalStart.SECOND00 );
                        
                            
                            
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                            
                            
    dataStart formatter.parse(formatter.format((calStart.getTime())));
                            
    dataEnd formatter.parse(formatter.format((calEnd.getTime()))); 
    Grazie mille!

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da TommyGun
    Ecco qua il risultato finale:
    Che è molto dubbio ....

    Ti è già stato detto che non va bene settare un campo togliendo una certa quantità. Se setti nel calendar il giorno 1 togliendogli 1 ... che succede? Si deve usare add()/roll().

    E poi che senso ha prendere il Date dal Calendar, formattarlo in stringa e poi quest'ultima subito parsarla?? Mi riferisco a tutto il giro:

    dataStart = formatter.parse(formatter.format((calStart.getTime ())));
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava 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 © 2026 vBulletin Solutions, Inc. All rights reserved.