Data del calendario nel formato aaaa-MM-gg in java


210

Come convertire la data del calendario in yyyy-MM-ddformato.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);            
Date inActiveDate = null;
try {
    inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

Questo produrrà inActiveDate = Wed Sep 26 00:00:00 IST 2012. Ma quello di cui ho bisogno è 2012-09-26. Il mio scopo è confrontare questa data con un'altra data nel mio database usando i criteri di ibernazione. Quindi ho bisogno dell'oggetto data in yyyy-MM-ddformato.


5
Il tuo codice è confuso. Stai cercando di formattare un Datead yyyy-MM-ddo di analizzare una stringa da yyyy-MM-ddun Datevalore di ?? Per formattare la data, basta usare format1.format(date), per analizzarla, usareformat1.parse(someStringValueInTheCorrectFormat)
MadProgrammer il

Ho modificato la mia domanda .. Ci scusiamo per l'errore precedente ..
Sarika.S

9
one liner:( new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" ) ).format( Calendar.getInstance().getTime() );
Iwan Aucamp,

Risposte:


342

Un Java Dateè un contenitore per il numero di millisecondi dal 1 ° gennaio 1970 alle 00:00:00 GMT.

Quando usi qualcosa del genere System.out.println(date), Java usa Date.toString()per stampare il contenuto.

L'unico modo per cambiarlo è sovrascrivere Datee fornire la propria implementazione di Date.toString(). Ora prima di accendere il tuo IDE e provare questo, non lo farei; complicherà solo le cose. È meglio formattare la data nel formato che si desidera utilizzare (o visualizzare).

Java 8+

LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"

String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12

Prima di Java 8

Dovresti utilizzare il backport ThreeTen

Quanto segue viene mantenuto per scopi storici (come risposta originale)

Quello che puoi fare è formattare la data.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Output "Wed Sep 26 14:23:28 EST 2012"

String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"

System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"

Sono in realtà la stessa data, rappresentata in modo diverso.


1
Un po ', ma è molto più facile conCalendar
MadProgrammer il

1
In ogni caso per rimuovere completamente il fuso orario da questo oggetto calendario?
Sarika.S,

2
Se sei davvero serio sulla manipolazione di data / ora, dai un'occhiata a Joda Time , è molto più facile che scherzare conCalendar
MadProgrammer

2
@ n13 se la domanda riguardava la manipolazione della data del database o anche la manipolazione del tempo, potrei essere d'accordo con te. La domanda era come rappresentare un valore di data in un particolare formato di data
MadProgrammer

1
Risposta ben strutturata: si tratta sostanzialmente di una separazione modello (data) -vista (formato).
YoYo

19

Il tuo codice è sbagliato Nessun punto di analisi della data e conservarlo come oggetto Date.

È possibile formattare l'oggetto data calendario quando si desidera visualizzarlo e mantenerlo come una stringa.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
String inActiveDate = null;
try {
    inActiveDate = format1.format(date);
    System.out.println(inActiveDate );
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

13

java.time

La risposta di MadProgrammer è corretta, in particolare il suggerimento su Joda-Time . Il successore di Joda-Time è ora integrato in Java 8 come nuovo pacchetto java.time . Ecco un esempio di codice in Java 8.

Quando si lavora con data-ora (in contrapposizione alla data locale), il fuso orario è critico. Il giorno del mese dipende dal fuso orario. Ad esempio, il fuso orario dell'India è +05:30(cinque ore e mezza avanti rispetto a UTC), mentre la Francia è solo un'ora avanti. Quindi un momento in un nuovo giorno in India ha una data mentre lo stesso momento in Francia ha una data di "ieri". La creazione di un output di stringa privo di informazioni sul fuso orario o offset sta creando ambiguità. Hai chiesto l'output AAAA-MM-GG, quindi ho fornito, ma non lo consiglio. Invece di ISO_LOCAL_DATEavrei usato ISO_DATEper ottenere questo output:2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

Dump per console ...

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

Quando eseguito ...

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

Joda-Time

Codice simile usando la libreria Joda-Time , il precursore di java.time.

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

ISO 8601

A proposito, quel formato della tua stringa di input è un formato standard, uno dei numerosi formati di stringhe di data e ora definiti da ISO 8601 .

Sia Joda-Time che java.time utilizzano i formati ISO 8601 per impostazione predefinita quando analizzano e generano rappresentazioni di stringhe di vari valori di data e ora.


6

java.util.Datel'oggetto non può rappresentare la data in formato personalizzato invece devi usare il SimpleDateFormat.formatmetodo che restituisce string.

String myString=format1.format(date);

2

Per analizzare un java.util.Dateoggetto devi prima convertirlo in String usando il tuo formato.

inActiveDate = format1.parse(  format1.format(date)  );

Ma credo che tu sia ridondante qui.


2
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
Date date = c.getTime();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
JOptionPane.showMessageDialog(null, ft.format(date));

Questo visualizzerà la tua data + 7 giorni nel mese, giorno e anno in un riquadro della finestra JOption.


2
public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month, date);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
    String formatted = format1.format(cal.getTime());
    System.out.println(formatted);
}

2
Benvenuti in SO. Aggiungi un contesto / spiegazione, poiché le risposte solo al codice non soddisfano i nostri standard. Vedi stackoverflow.com/help/how-to-answer
Uwe Allner il

0

Ho trovato questo codice in cui la data viene confrontata in un formato da confrontare con il campo della data nel database ... potrebbe essere questo potrebbe esserti utile ...

Quando converti la stringa in data usando il formato semplice, è difficile confrontarla con il campo Data nei database mysql.

Quindi converti la data della stringa java nel formato usando seleziona STR_to_DATE ('tua data', '% m /% d /% Y') -> in questo formato, otterrai il formato esatto della data del campo della data mysql.

http://javainfinite.com/java/java-convert-string-to-date-and-compare/


3
Le risposte di solo collegamento sono sconsigliate su StackOverflow a causa del collegamento e di altri problemi. Puoi fornire un riepilogo delle informazioni con punti chiave?
Basil Bourque,

0
public static String ThisWeekStartDate(WebDriver driver) {
        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("Before Start Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("Start Date " + CurrentDate);
          return CurrentDate;

    }
    public static String ThisWeekEndDate(WebDriver driver) {

        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println("Before End Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("End Date " + CurrentDate);
          return CurrentDate;
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.