Kalenderdatum im Format JJJJ-MM-TT in Java


210

So konvertieren Sie das Kalenderdatum in das yyyy-MM-ddFormat.

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();
}

Dies wird produzieren inActiveDate = Wed Sep 26 00:00:00 IST 2012. Aber was ich brauche ist 2012-09-26. Mein Zweck ist es, dieses Datum anhand von Hibernate-Kriterien mit einem anderen Datum in meiner Datenbank zu vergleichen. Also brauche ich das Datumsobjekt im yyyy-MM-ddFormat.


5
Ihr Code ist verwirrend. Versuchen Sie, einen String zu formatieren oder einen String von zu einem Wert Datezu yyyy-MM-ddanalysieren ? Um das Datum zu formatieren, verwenden Sie einfach , um es zu analysieren, verwenden Sieyyyy-MM-ddDateformat1.format(date)format1.parse(someStringValueInTheCorrectFormat)
MadProgrammer

Ich habe meine Frage bearbeitet. Entschuldigung für den vorherigen Fehler.
Sarika.

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

Antworten:


342

Ein Java Dateist ein Container für die Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00:00 GMT.

Wenn Sie so etwas wie System.out.println(date)verwenden Date.toString(), druckt Java den Inhalt.

Die einzige Möglichkeit, dies zu ändern, besteht darin Date, Ihre eigene Implementierung zu überschreiben und bereitzustellen Date.toString(). Bevor Sie Ihre IDE starten und dies versuchen, würde ich es nicht tun. es wird die Sache nur komplizieren. Sie sollten das Datum besser in das Format formatieren, das Sie verwenden (oder anzeigen) möchten.

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

Vor Java 8

Sie sollten den ThreeTen Backport verwenden

Das Folgende wird für historische Zwecke beibehalten (als ursprüngliche Antwort)

Sie können das Datum formatieren.

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"

Dies ist eigentlich das gleiche Datum, unterschiedlich dargestellt.


1
Irgendwie, aber es ist viel einfacher mitCalendar
MadProgrammer

1
Wie auch immer, um die Zeitzone vollständig von diesem Kalenderobjekt zu entfernen?
Sarika.S

2
Wenn Sie Datum / Zeit - Manipulation wirklich ernst sind, werfen Sie einen Blick auf Joda Zeit , es ist wesentlich einfacher als Herumspielen mitCalendar
MadProgrammer

2
@ n13 Wenn die Frage die Manipulation des Datenbankdatums oder sogar der Uhrzeit betraf, stimme ich Ihnen möglicherweise zu. Die Frage war, wie man einen Datumswert in einem bestimmten Datumsformat darstellt
MadProgrammer

1
Gut strukturierte Antwort - dies ist im Grunde eine Trennung von Modell (Datum) und Ansicht (Format).
YoYo

19

Ihr Code ist falsch. Kein Punkt zum Parsen des Datums und behalten Sie dieses als Datumsobjekt.

Sie können das Kalenderdatumobjekt formatieren, wenn Sie es anzeigen möchten, und es als Zeichenfolge beibehalten.

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

Die Antwort von MadProgrammer ist richtig, insbesondere der Tipp zu Joda-Time . Der Nachfolger von Joda-Time ist jetzt als neues java.time-Paket in Java 8 integriert . Hier ist Beispielcode in Java 8.

Bei der Arbeit mit Datum und Uhrzeit (im Gegensatz zum lokalen Datum) ist die Zeitzone kritisch. Der Tag des Monats hängt von der Zeitzone ab. Zum Beispiel kann die Indien Zeitzone ist +05:30(fünfeinhalb Stunden vor UTC), während Frankreich nur eine Stunde voraus ist. Ein Moment an einem neuen Tag in Indien hat also ein Datum, während der gleiche Moment in Frankreich das Datum von gestern hat. Das Erstellen einer Zeichenfolgenausgabe ohne Zeitzonen- oder Versatzinformationen führt zu Mehrdeutigkeiten. Sie haben nach der Ausgabe von JJJJ-MM-TT gefragt, die ich bereitgestellt habe, aber ich empfehle sie nicht. Stattdessen ISO_LOCAL_DATEhätte ich ISO_DATEdiese Ausgabe erhalten: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 );

Auf die Konsole werfen ...

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

Beim Laufen…

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

Joda-Zeit

Ähnlicher Code unter Verwendung der Joda-Time- Bibliothek, dem Vorläufer von java.time.

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

ISO 8601

Übrigens ist dieses Format Ihrer Eingabezeichenfolge ein Standardformat, eines von mehreren praktischen Datums- / Uhrzeitzeichenfolgenformaten, die durch ISO 8601 definiert sind .

Sowohl Joda-Time als auch java.time verwenden standardmäßig die Formate ISO 8601, wenn Zeichenfolgendarstellungen verschiedener Datums- und Uhrzeitwerte analysiert und generiert werden.


6

java.util.DateDas Objekt kann das Datum nicht im benutzerdefinierten Format darstellen. Stattdessen müssen Sie eine SimpleDateFormat.formatMethode verwenden, die zurückgibt string.

String myString=format1.format(date);

2

Um ein java.util.DateObjekt zu analysieren , müssen Sie es zuerst in Ihrem eigenen Format in String konvertieren.

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

Aber ich glaube, Sie sind hier überflüssig.


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));

Dadurch wird Ihr Datum + 7 Tage im Format Monat, Tag und Jahr in einem JOption-Fenster angezeigt.


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
Willkommen bei SO. Bitte fügen Sie einen Kontext / eine Erklärung hinzu, da nur Code-Antworten nicht unseren Standards entsprechen. Siehe stackoverflow.com/help/how-to-answer
Uwe Allner

0

Ich habe diesen Code gefunden, in dem das Datum in einem Format verglichen wird, um es mit dem Datumsfeld in der Datenbank zu vergleichen. Möglicherweise ist dies für Sie hilfreich.

Wenn Sie die Zeichenfolge mit vereinfachtem Format in ein Datum konvertieren, ist es schwierig, sie mit dem Feld Datum in MySQL-Datenbanken zu vergleichen.

Konvertieren Sie also das Datum der Java-Zeichenfolge in das Format, indem Sie STR_to_DATE ('Ihr Datum', '% m /% d /% Y') -> in dieses Format auswählen. Dann erhalten Sie das genaue Datumsformat des MySQL-Datumsfelds.

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


3
Nur-Link-Antworten werden in StackOverflow aufgrund von Link-Rot und anderen Problemen nicht empfohlen. Können Sie eine Zusammenfassung der Informationen mit wichtigen Punkten geben?
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;
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.