Gibt es eine Entsprechung zur Formatierung im PHP-Date () -Stil in Java? Ich meine, in PHP kann ich Backslash-Escape-Zeichen verwenden, um sie buchstäblich behandeln zu lassen. Dh yyyy \ y \ e \ a \ r würde 2010 Jahre . Ich habe in Java nichts Ähnliches gefunden, alle Beispiele befassen sich nur mit integrierten Datumsformaten.
Insbesondere beschäftige ich mich mit JCalendar-Datumsauswahl und deren dateFormatString- Eigenschaft.
Ich brauche es, weil es in meinem Gebietsschema erforderlich ist, alle möglichen zusätzlichen Dinge im Datumsformat zu schreiben, wie z. B. d. (für Tag) nach Tagen Teil, m. (seit Jahren) nach Jahren Teil und so weiter. Im schlimmsten Fall könnte ich String Replace oder Regexp verwenden, aber vielleicht gibt es einen einfacheren Weg? Danke im Voraus!
quelle
SimpleDateFormat
in einigen Antworten verwendete Klasse notorisch mühsam und längst veraltet. Vermeide es. Verwenden Sie stattdessen die kurze Antwort von Mark Jeronimus , die die Verwendung von java.time, der modernen Java-API für Datum und Uhrzeit, demonstriert .Antworten:
Sicher, mit dem SimpleDateFormat können Sie Literalzeichenfolgen einschließen:
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
quelle
46''
. Der erste, der dem zweiten entkommt.java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher.Der Vollständigkeit halber
DateTimeFormatter
unterstützt Java 8 auch Folgendes:DateTimeFormatter.ofPattern("yyyy 'year'");
quelle
Sie können String.format verwenden, wie in java.util.Formatter dokumentiert :
Calendar c = ...; String s = String.format("%tY year", c); // -> s == "2010 year" or whatever the year actually is
quelle
java.time
Mark Jeronimus hat es bereits gesagt . Ich konkretisiere es ein bisschen mehr. Setzen Sie den zu druckenden Text einfach in einfache Anführungszeichen.
DateTimeFormatter yearFormatter = DateTimeFormatter.ofPattern("yyyy 'year'"); System.out.println(LocalDate.of(2010, Month.FEBRUARY, 3).format(yearFormatter)); System.out.println(Year.of(2010).format(yearFormatter)); System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Vilnius")).format(yearFormatter));
Ausgabe beim Laufen gerade:
Wenn Sie a
DateTimeFormatterBuilder
und seineappendPattern
Methode verwenden, verwenden Sie einfache Anführungszeichen auf die gleiche Weise. Oder verwenden SieappendLiteral
stattdessen die Methode und keine einfachen Anführungszeichen.Wie setzen wir dann ein einfaches Anführungszeichen in das Format? Zwei einfache Anführungszeichen ergeben eines. Es spielt keine Rolle, ob sich das doppelte einfache Anführungszeichen in einfachen Anführungszeichen befindet oder nicht:
DateTimeFormatter formatterWithSingleQuote = DateTimeFormatter.ofPattern("H mm'' ss\""); System.out.println(LocalTime.now(ZoneId.of("Europe/London")).format(formatterWithSingleQuote));
DateTimeFormatter formatterWithSingleQuoteInsideSingleQuotes = DateTimeFormatter.ofPattern("hh 'o''clock' a, zzzz", Locale.ENGLISH); System.out.println(ZonedDateTime.now(ZoneId.of("America/Los_Angeles")) .format(formatterWithSingleQuoteInsideSingleQuotes));
Alle oben genannten Formatierer können auch zum Parsen verwendet werden. Zum Beispiel:
LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote); System.out.println(time);
Die
SimpleDateFormat
Klasse, die verwendet wurde, als diese Frage vor fast 10 Jahren gestellt wurde, ist notorisch mühsam und längst veraltet. Ich empfehle stattdessen die Verwendung von java.time, der modernen Java-API für Datum und Uhrzeit. Deshalb zeige ich genau das.Links
DateTimeFormatter
quelle
java.text.SimpleDateFormat
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String formattedDate = formatter.format(date);
Weitere Informationen erhalten Sie hier Link-Text
quelle