Apakah ada yang setara dengan format gaya tanggal () php di Java? Maksud saya, di php saya bisa karakter backslash-escape agar diperlakukan secara harfiah. Yyyy \ y \ e \ a \ r akan menjadi tahun 2010 . Saya tidak menemukan yang serupa di Java, semua contoh hanya berurusan dengan format tanggal bawaan.
Secara khusus, saya berurusan dengan pemilih tanggal JCalendar dan properti dateFormatString mereka .
Saya membutuhkannya karena di lokal saya diperlukan untuk menulis segala macam hal tambahan dalam format tanggal, seperti d. (untuk hari) setelah berpisah hari, m. (selama bertahun-tahun) setelah bertahun-tahun berpisah dan seterusnya. Pada kasus terburuk saya bisa menggunakan string replace atau regexp tetapi mungkin ada cara yang lebih sederhana? Terima kasih sebelumnya!
sumber
SimpleDateFormat
kelas yang digunakan dalam beberapa jawaban terkenal merepotkan dan sudah lama usang. Hindari itu. Sebagai gantinya gunakan jawaban singkat dari Mark Jeronimus yang mendemonstrasikan penggunaan java.time, API tanggal dan waktu Java modern .Jawaban:
Tentu, dengan SimpleDateFormat Anda dapat menyertakan string literal:
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
sumber
46''
. Yang pertama lolos dari yang kedua.java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian.Sekadar kelengkapan, Java 8
DateTimeFormatter
juga mendukung ini:DateTimeFormatter.ofPattern("yyyy 'year'");
sumber
Anda dapat menggunakan String.format seperti yang didokumentasikan di java.util.Formatter :
Calendar c = ...; String s = String.format("%tY year", c); // -> s == "2010 year" or whatever the year actually is
sumber
java.time
Mark Jeronimus sudah mengatakannya . Saya menyempurnakannya sedikit lagi. Letakkan saja teks yang akan dicetak secara harfiah di dalam tanda kutip tunggal.
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));
Output saat berjalan barusan:
Jika Anda menggunakan a
DateTimeFormatterBuilder
danappendPattern
metodenya, gunakan tanda kutip tunggal dengan cara yang sama. Atau gunakanappendLiteral
metodenya sebagai gantinya dan tidak ada tanda kutip tunggal.Lalu, bagaimana kita memasukkan kutipan tunggal dalam format? Dua tanda kutip tunggal menghasilkan satu. Tidak masalah apakah tanda kutip tunggal ganda ada di dalam tanda kutip tunggal atau tidak:
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));
Semua pemformat di atas juga dapat digunakan untuk parsing. Sebagai contoh:
LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote); System.out.println(time);
The
SimpleDateFormat
kelas digunakan ketika pertanyaan ini diminta hampir 10 tahun yang lalu ini sangat merepotkan dan lama usang. Saya merekomendasikan bahwa sebagai gantinya Anda menggunakan java.time, API tanggal dan waktu Java modern. Itulah mengapa saya mendemonstrasikan hal itu.Tautan
DateTimeFormatter
sumber
java.text.SimpleDateFormat
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String formattedDate = formatter.format(date);
Anda akan mendapatkan info lebih lanjut di sini teks tautan
sumber