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
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!
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
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();
}
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()));
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());
}
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();
}
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);
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.
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.
Ja, Java.time
funktioniert gut auf Java 6 und höher sowie auf älteren und neueren Android-Geräten.
org.threeten.bp
mit Unterpaketen importieren.Java.time
.Java.time
zuerst beschrieben wurde.Java.time
nach Java 6 und 7 (ThreeTen für JSR-310).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
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