Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              Java-String to date Umwandlung                                      13 Antworten                          
  •     
    

Ich versuche, dieses Datum mit SimpleDateFormat zu analysieren und es nicht funktioniert:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Formaterclass {
    public static void main(String[] args) throws ParseException{
        String strDate = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date dateStr = formatter.parse(strDate);
        String formattedDate = formatter.format(dateStr);
        System.out.println("yyyy-MM-dd date is ==>"+formattedDate);
        Date date1 = formatter.parse(formattedDate);

        formatter = new SimpleDateFormat("dd-MMM-yyyy");
        formattedDate = formatter.format(date1);
        System.out.println("dd-MMM-yyyy date is ==>"+formattedDate);
    }
}

Wenn ich diesen Code versuchen, mit strDate = "2008-10-14", ich habe eine positive Antwort. Was ist das Problem? Wie kann ich dieses Format analysieren?

PS. Ich habe dieses Datum aus einem jDatePicker und es gibt keine Anleitung, wie ändern Sie das Datumsformat erhalte ich, wenn der Benutzer ein Datum auswählt.

War es hilfreich?

Lösung

Sie können nicht erwarten, ein Datum mit einem Simple zu analysieren, die mit einem anderen Format eingerichtet ist.

Um die „Do 18. Juni 20.56.02 EDT 2009“ date String parsen müssen Sie ein Simple wie folgt aus (in etwa):

SimpleDateFormat parser=new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");

Hier können Sie die Zeichenfolge in ein Datum analysieren, und dann andere Simple dieses Datum in das Format drehen Sie wollen.

        String input = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat parser = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
        Date date = parser.parse(input);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = formatter.format(date);

        ...

JavaDoc: http://docs.oracle. com / JavaSE / 7 / docs / api / java / text / SimpleDateFormat.html

Andere Tipps

Das Problem ist, dass Sie ein Datum formatiert wie folgt aussehen:

Thu Jun 18 20:56:02 EDT 2009

Aber sind mit einem SimpleDateFormat, die lautet:

yyyy-MM-dd

Die beiden Formate nicht übereinstimmen. Sie benötigen einen SimpleDateFormat zu konstruieren, die die Spiele Layout der Zeichenfolge Sie versuchen, zu einem Datum zu analysieren. Dinge Aneinanderreihung, um es einfach zu sehen, Sie wollen ein SimpleDateFormat wie folgt aus:

EEE MMM dd HH:mm:ss zzz yyyy
Thu Jun 18 20:56:02 EDT 2009

Überprüfen Sie die JavaDoc Seite I verknüpft und sehen, wie die Zeichen verwendet werden.

Wir haben jetzt eine modernere Art und Weise, diese Arbeit zu tun.

java.time

Der java.time Rahmen wird mit Java gebündelt 8 und höher. Siehe Tutorial . Diese neuen Klassen sind inspiriert von Joda-Time , definiert durch JSR 310 und durch die ThreeTen-extra Projekt. Sie sind eine große Verbesserung gegenüber den lästigen alten Klassen, java.util.Date/.Calendar et al.

Beachten Sie, dass die 3-4-Buchstaben-Codes wie EDT sind weder standardisiert noch einzigartig. Vermeiden Sie, wenn möglich. Lernen Sie, ISO 8601 Standardformate verwenden Sie stattdessen. Der java.time Rahmen einen Stich übersetzen nehmen kann, aber viele der häufig verwendeten Codes haben doppelte Werte.

Übrigens, beachten Sie, wie java.time standardmäßig Strings erzeugt die ISO 8601-Formate verwenden, aber erweitert um den Namen der Zeitzone in Klammern angehängt wird.

String input = "Thu Jun 18 20:56:02 EDT 2009";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "EEE MMM d HH:mm:ss zzz yyyy" , Locale.ENGLISH );
ZonedDateTime zdt = formatter.parse ( input , ZonedDateTime :: from );

Dump zu trösten.

System.out.println ( "zdt : " + zdt );

Wenn er gestartet wird.

  

zdt: 2009-06-18T20: 56: 02-04: 00 [America / New_York]

einstellen Zeitzone

Für Spaß sich zum Indien Zeitzone anpassen.

ZonedDateTime zdtKolkata = zdt.withZoneSameInstant ( ZoneId.of ( "Asia/Kolkata" ) );
  

zdtKolkata: 2009-06-19T06: 26: 02 + 05: 30 [Asia / Kolkata]

Konvertieren

bis j.u.Date

Wenn Sie wirklich ein java.util.Date Objekt für die Verwendung mit Klassen noch nicht aktualisiert, um die java.time Typen benötigen, konvertieren. Beachten Sie, dass die zugewiesene Zeitzone verlieren, haben aber im selben Augenblick automatisch href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time"> UTC

java.util.Date date = java.util.Date.from( zdt.toInstant() );

Wie wäre es getSelectedDate ? Wie auch immer, die speziell auf Ihrem Code Frage, ist das Problem mit dieser Zeile:

new SimpleDateFormat("yyyy-MM-dd");

Der String, der im Konstruktor geht hat das Format des Datums entspricht. Die Dokumentation, wie das zu tun ist, hier . Sieht aus wie Sie etwas in der Nähe "EEE MMM d HH: mm: ss zzz yyyy" benötigen

Als Antwort auf: " Wie konvertiert Di 13. September 2016 00:00:00 GMT-0500 (Hora de verano Zentral (Mexiko)) bis dd-MM-JJ in Java? " wurde markiert, wie doppelte

Versuchen Sie folgendes: Mit java.util.Date, java.text.SimpleDateFormat, dann ist es eine einfache Lösung.

public static void main(String[] args) throws ParseException {

    String fecha = "Tue Sep 13 2016 00:00:00 GMT-0500 (Hora de verano central (México))";
    Date f = new Date(fecha);

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    sdf.setTimeZone(TimeZone.getTimeZone("-5GMT"));
    fecha = sdf.format(f);
    System.out.println(fecha);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top