wake-up-neo.com

Wie konvertiere ich einen String mit SimpleDateFormat in ein Datum?

Ich habe diesen Code-Ausschnitt:

DateFormat formatter1;
formatter1 = new SimpleDateFormat("mm/DD/yyyy");
System.out.println((Date)formatter1.parse("08/16/2011"));

Wenn ich das starte, bekomme ich das als Ausgabe:

Sun Jan 16 00:10:00 IST 2011

Ich erwartete:

Tue Aug 16 "Whatever Time" IST 2011

Ich meine damit, dass ich den Monat nicht wie erwartet bekomme. Was ist der fehler

60
Shantanu Tomar

Versuche dies:

new SimpleDateFormat("MM/dd/yyyy")
  • MM ist "Monat" (nicht mm)
  • dd ist "Tag" (nicht DD)

Es ist alles im Javadoc für SimpleDateFormat


Zu Ihrer Information, der Grund, warum Ihr Format immer noch ein gültiges Datumsformat ist, ist:

  • mm ist "Minuten"
  • DD ist "Tag in Jahr"

Außerdem brauchen Sie die Umwandlung in Date... nicht, es ist bereits ist eine Date (oder explodiert):

public static void main(String[] args) throws ParseException {
    System.out.println(new SimpleDateFormat("MM/dd/yyyy").parse("08/16/2011"));
}

Ausgabe:

Tue Aug 16 00:00:00 EST 2011

Voila!

89
Bohemian

m - min M - Monate

Letter  Date or Time Component  Presentation    Examples
G       Era designator          Text                AD
y       Year                    Year                1996; 96
M       Month in year           Month               July; Jul; 07
w       Week in year            Number              27
W       Week in month           Number              2
D       Day in year             Number              189
d       Day in month            Number              10
F       Day of week in month    Number              2
E       Day in week             Text                Tuesday; Tue
a       Am/pm marker            Text                PM
H       Hour in day (0-23)      Number              0
k       Hour in day (1-24)      Number              24
K       Hour in am/pm (0-11)    Number              0
h       Hour in am/pm (1-12)    Number              12
m       Minute in hour          Number              30
s       Second in minute        Number              55
S       Millisecond             Number              978
z       Time zone               General time zone   Pacific Standard Time; PST; GMT-08:00
Z       Time zone               RFC 822 time zone   -0800 
42
jahir

Verwenden Sie die unten stehende Funktion

/**
     * Format a time from a given format to given target format
     * 
     * @param inputFormat
     * @param inputTimeStamp
     * @param outputFormat
     * @return
     * @throws ParseException
     */
    private static String TimeStampConverter(final String inputFormat,
            String inputTimeStamp, final String outputFormat)
            throws ParseException {
        return new SimpleDateFormat(outputFormat).format(new SimpleDateFormat(
                inputFormat).parse(inputTimeStamp));
    }

Beispielverwendung ist wie folgt:

    try {
        String inputTimeStamp = "08/16/2011";

        final String inputFormat = "MM/dd/yyyy";
        final String outputFormat = "EEE MMM dd HH:mm:ss z yyyy";

        System.out.println(TimeStampConverter(inputFormat, inputTimeStamp,
                outputFormat));

    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
11
String newstr = "08/16/2011";
SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat format = new SimpleDateFormat("EE MMM dd hh:mm:ss z yyyy");
Calendar c = Calendar.getInstance();
c.setTime(format1.parse(newstr));
System.out.println(format.format(c.getTime()));
6
kandarp

Sehr einfaches Beispiel ist.

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
                Date date = new Date();
                Date date1 = new Date();
            try {
                System.out.println("Date1:   "+date1);
                System.out.println("date" + date);

                date = simpleDateFormat.parse("01-01-2013");
                date1 = simpleDateFormat.parse("06-15-2013");

                System.out.println("Date1 is:"+date1);
                System.out.println("date" + date);

            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
4
Krishna

Dieser Code hilft dabei, hin und her zu konvertieren

    System.out.println("Date: "+ String.valueOf(new Date()));
    SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String stringdate = dt.format(new Date());
    System.out.println("String.valueOf(date): "+stringdate);

    try {
    Date date = dt.parse(stringdate);
    System.out.println("parse date: "+ String.valueOf(date));
    } catch (ParseException e) {
    e.printStackTrace();
    }
4

sie können das Problem sehr einfach lösen, wie Konvertieren Sie zuerst die angegebene Zeichenfolge in das Datumsobjekt z.B: 

Java.util.Date date1 = new Date("11/19/2015"); 
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd yyyy HH:mma");
String format = formatter.format(date);
System.out.println(format);
3
BEN SEBASTIAN
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");
    System.out.println(LocalDate.parse("08/16/2011", dateFormatter));

Ausgabe:

2011-08-16

Ich steuere die moderne Antwort bei. Die Antwort von Bohemian ist richtig und war eine gute Antwort, als sie vor 6 Jahren geschrieben wurde. Jetzt ist die notorisch lästige SimpleDateFormat-Klasse längst überholt und wir haben mit Java.time, der modernen Java-API für Datums- und Zeitangaben, eine viel bessere Lösung. Ich empfehle Ihnen wärmstens, diese anstelle der alten Datum-Uhrzeit-Klassen zu verwenden.

Was ist in Ihrem Code falsch gelaufen?

Wenn ich 08/16/2011 mit Ihrem Snippet analysiere, erhalte ich Sun Jan 16 00:08:00 CET 2011. Da mm in Kleinbuchstaben für Minuten steht, erhalte ich 00:08:00 (8 Minuten nach Mitternacht), und da DD in Großbuchstaben für den Tag des Jahres steht, bekomme ich den 16. Januar.

Bei Java.time zu Formatmusterzeichenfolgen wird die Groß- und Kleinschreibung beachtet, und wir mussten Großschreibung MM für Monat und Kleinbuchstaben für Tag des Monats verwenden.

Frage: Kann ich Java.time mit meiner Java-Version verwenden?

Ja, Java.time funktioniert gut auf Java 6 und höher sowie auf älteren und neueren Android-Geräten.

  • In Java 8 und höher und auf neuen Android-Geräten (von API-Ebene 26 wurde mir gesagt), ist die moderne API integriert.
  • In Java 6 und 7 erhalten Sie den ThreeTen Backport, den Backport der neuen Klassen (ThreeTen für JSR 310; siehe die Links unten).
  • Bei (älterem) Android verwenden Sie die Android-Version von ThreeTen Backport. Es heißt ThreeTenABP. Stellen Sie sicher, dass Sie die Datums- und Zeitklassen aus org.threeten.bp mit Unterpaketen importieren.

Links

2
Ole V.V.
String localFormat = Android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE MMMM d");
return new SimpleDateFormat(localFormat, Locale.getDefault()).format(localMidnight);

gibt ein Format zurück, das auf der Gerätesprache basiert . Beachten Sie, dass getBestDateTimePattern () "die bestmögliche lokalisierte Form des angegebenen Skeletts für das angegebene Gebietsschema" zurückgibt

1
Dan Alboteanu

Sie haben einige type-Fehler verwendet. Wenn Sie 08/16/2011 auf folgendes Muster einstellen möchten. Es ist falsch, weil 

mm steht für Minuten, verwenden Sie MM wie für Monate

DD ist falsch, es sollte dd sein, was Days darstellt.

Versuchen Sie dies, um die gewünschte Ausgabe zu erhalten (Tue Aug 16 "Whatever Time" IST 2011).

    String date = "08/16/2011"; //input date as String

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy"); // date pattern

    Date myDate = simpleDateFormat.parse(date); // returns date object 

    System.out.println(myDate); //outputs: Tue Aug 16 00:00:00 IST 2011
1
Dulith De Costa