Saya memiliki java.util.Date
dalam format yyyy-mm-dd
. Saya ingin dalam formatmm-dd-yyyy
Di bawah ini adalah contoh yang saya coba untuk konversi ini:
// Setting the pattern
SimpleDateFormat sm = new SimpleDateFormat("mm-dd-yyyy");
// myDate is the java.util.Date in yyyy-mm-dd format
// Converting it into String using formatter
String strDate = sm.format(myDate);
//Converting the String back to java.util.Date
Date dt = sm.parse(strDate);
Tetap saja keluaran yang saya dapatkan tidak dalam format mm-dd-yyyy
.
Mohon beri tahu saya cara memformat java.util.Date
dari yyyy-mm-dd
menjadimm-dd-yyyy
java
date
date-format
pengguna182944
sumber
sumber
yyyy-mm-dd
.Jawaban:
Date
adalah wadah untuk jumlah milidetik sejak zaman Unix (00:00:00 UTC pada 1 Januari 1970).Tidak ada konsep format.
Java 8+
LocalDateTime ldt = LocalDateTime.now(); System.out.println(DateTimeFormatter.ofPattern("MM-dd-yyyy", Locale.ENGLISH).format(ldt)); System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH).format(ldt)); System.out.println(ldt);
Keluaran ...
05-11-2018 2018-05-11 2018-05-11T17:24:42.980
Jawa 7-
Anda harus memanfaatkan ThreeTen Backport
Jawaban Asli
Sebagai contoh...
Date myDate = new Date(); System.out.println(myDate); System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate)); System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate)); System.out.println(myDate);
Keluaran ...
Wed Aug 28 16:20:39 EST 2013 08-28-2013 2013-08-28 Wed Aug 28 16:20:39 EST 2013
Tidak ada pemformatan yang mengubah nilai dasarnya
Date
. Ini adalah tujuan dariDateFormatter
sDiperbarui dengan contoh tambahan
Kalau-kalau contoh pertama tidak masuk akal ...
Contoh ini menggunakan dua format untuk memformat tanggal yang sama. Saya kemudian menggunakan format yang sama ini untuk mengurai
String
nilai kembali keDate
s. Parse yang dihasilkan tidak mengubah caraDate
melaporkan nilainya.Date#toString
hanyalah tumpukan isinya. Anda tidak dapat mengubah ini, tetapi Anda dapat memformatDate
objek sesuka Andatry { Date myDate = new Date(); System.out.println(myDate); SimpleDateFormat mdyFormat = new SimpleDateFormat("MM-dd-yyyy"); SimpleDateFormat dmyFormat = new SimpleDateFormat("yyyy-MM-dd"); // Format the date to Strings String mdy = mdyFormat.format(myDate); String dmy = dmyFormat.format(myDate); // Results... System.out.println(mdy); System.out.println(dmy); // Parse the Strings back to dates // Note, the formats don't "stick" with the Date value System.out.println(mdyFormat.parse(mdy)); System.out.println(dmyFormat.parse(dmy)); } catch (ParseException exp) { exp.printStackTrace(); }
Output mana ...
Wed Aug 28 16:24:54 EST 2013 08-28-2013 2013-08-28 Wed Aug 28 00:00:00 EST 2013 Wed Aug 28 00:00:00 EST 2013
Juga, berhati-hatilah dengan pola format. Perhatikan lebih dekat
SimpleDateFormat
untuk memastikan Anda tidak menggunakan pola yang salah;)sumber
SimpleDateFormat("MM-dd-yyyy");
dari pada
SimpleDateFormat("mm-dd-yyyy");
karena
MM points Month
,mm points minutes
SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy"); String strDate = sm.format(myDate);
sumber
java.util.Date
?'M' (Capital) mewakili bulan & 'm' (Simple) mewakili menit
Beberapa contoh selama berbulan-bulan
'M' -> 7 (without prefix 0 if it is single digit) 'M' -> 12 'MM' -> 07 (with prefix 0 if it is single digit) 'MM' -> 12 'MMM' -> Jul (display with 3 character) 'MMMM' -> December (display with full name)
Beberapa contoh untuk menit
'm' -> 3 (without prefix 0 if it is single digit) 'm' -> 19 'mm' -> 03 (with prefix 0 if it is single digit) 'mm' -> 19
sumber
tl; dr
LocalDate.parse( "01-23-2017" , DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) )
Detail
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 keInstant
objek. TheInstant
kelas merupakan saat di timeline di UTC dengan resolusi nanodetik (hingga sembilan (9) angka dari pecahan desimal).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 aZonedDateTime
.LocalDate
Jika Anda hanya peduli dengan tanggal tanpa waktu, ekstrak file
LocalDate
.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.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) daripadaMM
(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?
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 .sumber
Ini adalah penggunaan sederhana di bawah kode.
final Date todayDate = new Date(); System.out.println(todayDate); System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(todayDate)); System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(todayDate)); System.out.println(todayDate);
sumber
Anda bisa mendapatkan hari, bulan dan tahun dan bisa menggabungkannya atau bisa menggunakan format MM-dd-yyyy seperti yang diberikan di bawah ini.
Date date1 = new Date(); String mmddyyyy1 = new SimpleDateFormat("MM-dd-yyyy").format(date1); System.out.println("Formatted Date 1: " + mmddyyyy1); Date date2 = new Date(); Calendar calendar1 = new GregorianCalendar(); calendar1.setTime(date2); int day1 = calendar1.get(Calendar.DAY_OF_MONTH); int month1 = calendar1.get(Calendar.MONTH) + 1; // {0 - 11} int year1 = calendar1.get(Calendar.YEAR); String mmddyyyy2 = ((month1<10)?"0"+month1:month1) + "-" + ((day1<10)?"0"+day1:day1) + "-" + (year1); System.out.println("Formatted Date 2: " + mmddyyyy2); LocalDateTime ldt1 = LocalDateTime.now(); DateTimeFormatter format1 = DateTimeFormatter.ofPattern("MM-dd-yyyy"); String mmddyyyy3 = ldt1.format(format1); System.out.println("Formatted Date 3: " + mmddyyyy3); LocalDateTime ldt2 = LocalDateTime.now(); int day2 = ldt2.getDayOfMonth(); int mont2= ldt2.getMonthValue(); int year2= ldt2.getYear(); String mmddyyyy4 = ((mont2<10)?"0"+mont2:mont2) + "-" + ((day2<10)?"0"+day2:day2) + "-" + (year2); System.out.println("Formatted Date 4: " + mmddyyyy4); LocalDateTime ldt3 = LocalDateTime.of(2020, 6, 11, 14, 30); // int year, int month, int dayOfMonth, int hour, int minute DateTimeFormatter format2 = DateTimeFormatter.ofPattern("MM-dd-yyyy"); String mmddyyyy5 = ldt3.format(format2); System.out.println("Formatted Date 5: " + mmddyyyy5); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(new Date()); int day3 = calendar2.get(Calendar.DAY_OF_MONTH); // OR Calendar.DATE int month3= calendar2.get(Calendar.MONTH) + 1; int year3 = calendar2.get(Calendar.YEAR); String mmddyyyy6 = ((month3<10)?"0"+month3:month3) + "-" + ((day3<10)?"0"+day3:day3) + "-" + (year3); System.out.println("Formatted Date 6: " + mmddyyyy6); Date date3 = new Date(); LocalDate ld1 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date3)); // Accepts only yyyy-MM-dd int day4 = ld1.getDayOfMonth(); int month4= ld1.getMonthValue(); int year4 = ld1.getYear(); String mmddyyyy7 = ((month4<10)?"0"+month4:month4) + "-" + ((day4<10)?"0"+day4:day4) + "-" + (year4); System.out.println("Formatted Date 7: " + mmddyyyy7); Date date4 = new Date(); int day5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getDayOfMonth(); int month5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getMonthValue(); int year5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getYear(); String mmddyyyy8 = ((month5<10)?"0"+month5:month5) + "-" + ((day5<10)?"0"+day5:day5) + "-" + (year5); System.out.println("Formatted Date 8: " + mmddyyyy8); Date date5 = new Date(); int day6 = Integer.parseInt(new SimpleDateFormat("dd").format(date5)); int month6 = Integer.parseInt(new SimpleDateFormat("MM").format(date5)); int year6 = Integer.parseInt(new SimpleDateFormat("yyyy").format(date5)); String mmddyyyy9 = ((month6<10)?"0"+month6:month6) + "-" + ((day6<10)?"0"+day6:day6) + "-" + (year6);`enter code here` System.out.println("Formatted Date 9: " + mmddyyyy9);
sumber
Silahkan ubah bulan kecil "mm" menjadi kapital "MM" maka akan berhasil. Untuk referensi di bawah ini adalah contoh kode.
Date myDate = new Date(); SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy"); String strDate = sm.format(myDate); Date dt = sm.parse(strDate); System.out.println(strDate);
sumber
lihat ini ..
tanggal format
DateTimeFormatter
tanggal parsing
Instan dengan zona
sumber