Wie ein Datum analysieren? [Duplikat]
-
14-09-2019 - |
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.
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" ) );
KonvertierenzdtKolkata: 2009-06-19T06: 26: 02 + 05: 30 [Asia / Kolkata]
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);
}