tl; dr
LocalDate.parse(
"01-23-2017" ,
DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)
Detail
Saya memiliki java.util.Date dalam format yyyy-mm-dd
Seperti yang disebutkan lain, Date
kelas tidak memiliki format. Ini memiliki hitungan milidetik sejak awal tahun 1970 di UTC. Tanpa pamrih.
java.time
Jawaban lain menggunakan kelas tanggal-waktu lama lama yang merepotkan, sekarang digantikan oleh kelas java.time.
Jika Anda memiliki java.util.Date
, konversikan ke Instant
objek. The Instant
kelas merupakan saat di timeline di UTC dengan resolusi nanodetik (hingga sembilan (9) angka dari pecahan desimal).
Instant instant = myUtilDate.toInstant();
Zona waktu
Jawaban lainnya mengabaikan masalah penting zona waktu. Menentukan tanggal membutuhkan zona waktu. Untuk saat tertentu, tanggal bervariasi di seluruh dunia menurut zona. Beberapa menit setelah tengah malam di Paris Prancis adalah hari baru, sementara masih "kemarin" di Montréal Québec.
Tentukan zona waktu yang Anda inginkan untuk konteks Anda Instant
.
ZoneId z = ZoneId.of( "America/Montreal" );
Terapkan ZoneId
untuk mendapatkan a ZonedDateTime
.
ZonedDateTime zdt = instant.atZone( z );
LocalDate
Jika Anda hanya peduli dengan tanggal tanpa waktu, ekstrak file LocalDate
.
LocalDate localDate = zdt.toLocalDate();
Untuk menghasilkan string dalam format ISO 8601 standar, YYYY-MM-DD, cukup panggil toString
. Kelas java.time menggunakan format standar secara default saat membuat / mem-parsing string.
String output = localDate.toString();
2017-01-23
Jika Anda menginginkan format MM-DD-YYYY, tentukan pola pemformatan.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = localDate.format( f );
Perhatikan bahwa kode pola pemformatan peka huruf besar-kecil. Kode di Pertanyaan salah digunakan mm
(menit dalam jam) daripada MM
(bulan dalam tahun).
Gunakan DateTimeFormatter
objek yang sama untuk parsing. Kelas java.time aman untuk thread, jadi Anda dapat menyimpan objek ini dan menggunakannya kembali berulang kali bahkan di seluruh thread.
LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
Tentang java.time
The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti java.util.Date
, Calendar
, & SimpleDateFormat
.
Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .
Di mana mendapatkan kelas java.time?
- Java SE 8 dan SE 9 dan yang lebih baru
- Bawaan.
- Bagian dari Java API standar dengan implementasi yang dibundel.
- Java 9 menambahkan beberapa fitur dan perbaikan kecil.
- Java SE 6 dan SE 7
- Sebagian besar fungsionalitas java.time di-back-port ke Java 6 & 7 di ThreeTen-Backport .
- Android
Proyek ThreeTen-Extra memperluas java.time dengan kelas tambahan. Proyek ini adalah tempat pembuktian untuk kemungkinan penambahan java.time di masa mendatang. Anda mungkin menemukan beberapa kelas berguna di sini seperti Interval
, YearWeek
, YearQuarter
, dan lebih .