Konversi java.util.Date ke String

1. Ikhtisar

Dalam tutorial ini, kami akan menunjukkan bagaimana kita dapat mengonversi objek Date menjadi objek String di Java . Untuk melakukannya, kita akan bekerja dengan tipe java.util.Date yang lebih lama serta dengan API Tanggal / Waktu baru yang diperkenalkan di Java 8.

Jika Anda ingin mempelajari cara melakukan konversi sebaliknya, yaitu dari tipe String ke Tanggal , Anda dapat melihat tutorial ini di sini.

Untuk detail lebih lanjut tentang API Tanggal / Waktu baru , silakan lihat tutorial terkait ini.

2. Mengubah java.util.Date menjadi String

Meskipun kita tidak boleh menggunakan java.util.Date jika kita bekerja dengan Java 8, terkadang kita tidak punya pilihan (misalnya, kita menerima objek Date dari perpustakaan yang tidak berada dalam kendali kita).

Dalam kasus seperti itu, kami memiliki beberapa cara untuk mengonversi java.util.Date menjadi String yang kami inginkan.

2.1. Mempersiapkan Objek Tanggal

Pertama-tama mari kita deklarasikan representasi String yang diharapkan dari tanggal kita dan tentukan pola format tanggal yang diinginkan:

private static final String EXPECTED_STRING_DATE = "Aug 1, 2018 12:00 PM"; private static final String DATE_FORMAT = "MMM d, yyyy HH:mm a";

Sekarang kita membutuhkan objek Date yang ingin kita ubah. Kami akan menggunakan contoh Kalender untuk membuatnya:

TimeZone.setDefault(TimeZone.getTimeZone("CET")); Calendar calendar = Calendar.getInstance(); calendar.set(2018, Calendar.AUGUST, 1, 12, 0); Date date = calendar.getTime();

Kami telah menyetel TimeZone default ke CET untuk mencegah masalah saat bekerja dengan API baru nanti. Kami harus dicatat bahwa pada Tanggal itu sendiri tidak memiliki zona waktu, namun toString () menggunakan zona waktu default saat .

Kami akan menggunakan contoh Tanggal ini dalam semua contoh kami di bawah ini.

2.2. Menggunakan Kelas SimpleDateFormat

Kami akan menggunakan metode format () dari kelas SimpleDateFormat dalam contoh ini. Mari buat sebuah instance dengan menggunakan format tanggal kita:

DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);

Setelah ini, kita dapat memformat tanggal kita dan membandingkannya dengan keluaran yang diharapkan:

String formattedDate = formatter.format(date); assertEquals(EXPECTED_STRING_DATE, formattedDate);

2.3. Menggunakan Kelas Abstrak DateFormat

Seperti yang bisa kita lihat, SimpleDateFormat adalah subkelas dari kelas DateFormat abstrak . Kelas ini menyediakan berbagai metode untuk pemformatan tanggal dan waktu.

Kami akan menggunakannya untuk mencapai hasil yang sama seperti di atas:

String formattedDate = DateFormat .getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT) .format(date);

Dengan pendekatan ini, kita melewatkan pola gaya - SEDANG untuk tanggal dan PENDEK untuk waktu dalam kasus kita.

3. Menggunakan Kelas Formatter

Cara sederhana lain untuk mendapatkan String yang sama seperti pada contoh sebelumnya adalah dengan menggunakan kelas Formatter .

Meskipun ini mungkin bukan solusi yang paling mudah dibaca, ini adalah satu-baris yang aman untuk thread yang dapat berguna, terutama di lingkungan multi-threaded (kita harus ingat bahwa SimpleDateFormat tidak aman untuk thread):

String formattedDate = String.format("%1$tb %1$te, %1$tY %1$tI:%1$tM %1$Tp", date);

Kami menggunakan 1 $ untuk menunjukkan bahwa kami hanya akan mengirimkan satu argumen untuk digunakan dengan setiap bendera. Penjelasan rinci tentang bendera dapat ditemukan di bagian Konversi Tanggal / Waktu dari kelas Formatter .

4. Konversi Menggunakan API Tanggal / Waktu Java 8

The Date / Time API dari Java 8 jauh lebih kuat daripada java.util.Date dan java.util.Calendar kelas, dan kita harus menggunakannya bila memungkinkan. Mari kita lihat bagaimana kita bisa menggunakannya untuk mengubah objek Date kita yang ada menjadi String .

Kali ini, kita akan menggunakan kelas DateTimeFormatter dan metode format () , serta pola tanggal yang sama, dideklarasikan di Bagian 2.1:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_FORMAT);

Untuk menggunakan API baru, kita perlu mengubah objek Tanggal kita menjadi objek Instan :

Instant instant = date.toInstant();

Karena String yang kami harapkan memiliki bagian tanggal dan waktu, kami juga perlu mengonversi objek Instan ke LocalDateTime :

LocalDateTime ldt = instant .atZone(ZoneId.of("CET")) .toLocalDateTime();

Dan terakhir, kita bisa dengan mudah mendapatkan String yang telah diformat :

String formattedDate = ldt.format(formatter);

5. Kesimpulan

Pada artikel ini, kami mengilustrasikan beberapa cara untuk mengonversi objek java.util.Date ke String . Kami pertama menunjukkan bagaimana melakukan itu menggunakan lebih tua java.util.Date dan java.util.Calendar kelas dan sesuai tanggal format kelas.

Kemudian kami menggunakan kelas Formatter dan, terakhir, Java 8 Date / Time API.

Seperti biasa, kode sumber lengkap dapat ditemukan di GitHub.