Ubah String menjadi Tanggal di Java

1. Ikhtisar

Dalam tutorial ini, kita akan menjelajahi beberapa cara untuk mengubah objek String menjadi objek Tanggal . Kita akan mulai dengan API Waktu Tanggal baru - java.time yang diperkenalkan di Java 8 sebelum melihat tipe data java.util.Date lama yang juga digunakan untuk merepresentasikan tanggal.

Untuk menyelesaikannya, kita juga akan melihat beberapa perpustakaan eksternal untuk konversi menggunakan Joda-Time dan kelas Apache Commons Lang DateUtils .

2. Mengubah String ke LocalDate atau LocalDateTime

LocalDate dan LocalDateTime adalah objek tanggal-waktu yang tidak dapat diubah yang mewakili tanggal dan yang terakhir adalah tanggal dan waktu. Secara default, tanggal Java dalam format ISO-8601, jadi jika kita memiliki string yang mewakili tanggal dan waktu dalam format ini, maka kita dapat menggunakan API parse () dari kelas ini secara langsung .

Berikut sedikit lebih detail tentang API baru ini.

2.1. Menggunakan Parse API

API Tanggal-Waktu menyediakan metode parse () untuk mengurai String yang berisi informasi tanggal dan waktu. Untuk mengonversi objek String ke objek LocalDate dan LocalDateTime , String harus mewakili tanggal atau waktu yang valid sesuai dengan ISO_LOCAL_DATE atau ISO_LOCAL_DATE_TIME.

Jika tidak, DateTimeParseException akan dilempar saat runtime.

Dalam contoh pertama kita, mari kita ubah String menjadi java.time . LocalDate :

LocalDate date = LocalDate.parse("2018-05-05");

Pendekatan serupa di atas dapat digunakan untuk mengubah String menjadi java.time . LocalDateTime :

LocalDateTime dateTime = LocalDateTime.parse("2018-05-05T11:50:55");

Penting untuk diperhatikan bahwa objek LocalDate dan LocalDateTime adalah agnostik zona waktu. Namun, ketika kita perlu berurusan dengan tanggal dan waktu khusus zona waktu, kita dapat menggunakan metode parse ZonedDateTime secara langsung untuk mendapatkan waktu tanggal tertentu zona waktu:

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2015-05-05T10:15:30+01:00[Europe/Paris]");

Sekarang mari kita lihat bagaimana kita mengonversi string dengan format kustom.

2.2. Menggunakan Parse API dengan Custom Formatter

Mengonversi String dengan format tanggal kustom menjadi objek Tanggal adalah operasi yang tersebar luas di Jawa.

Untuk tujuan ini, kita akan menggunakan kelas DateTimeFormatter yang menyediakan banyak pemformat yang telah ditentukan sebelumnya, dan memungkinkan kita untuk menentukan pemformat.

Mari kita mulai dengan contoh penggunaan salah satu pemformat DateTimeFormatter yang telah ditentukan sebelumnya :

String dateInString = "19590709"; LocalDate date = LocalDate.parse(dateInString, DateTimeFormatter.BASIC_ISO_DATE);

Pada contoh berikutnya, mari buat pemformat yang menerapkan format "EEE, MMM d yyyy". Format ini menetapkan tiga karakter untuk nama hari penuh dalam seminggu, satu digit untuk mewakili hari dalam sebulan, tiga karakter untuk mewakili bulan dan empat digit untuk mewakili tahun.

Formatter ini mengenali string seperti “ Jum, 3 Jan 2003 ″ atau“ Wed, 23 Mar 1994 “:

String dateInString = "Mon, 05 May 1980"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, d MMM yyyy", Locale.ENGLISH); LocalDate dateTime = LocalDate.parse(dateInString, formatter);

2.3. Pola Tanggal dan Waktu Umum

Mari kita lihat beberapa pola tanggal dan waktu yang umum:

  • y - Tahun (1996; 96)
  • M - Bulan dalam tahun (Juli; Juli; 07)
  • d - Hari dalam sebulan (1-31)
  • E - Nama hari dalam minggu (Jumat, Minggu)
  • a - penanda Am / pm (AM, PM)
  • H - Jam dalam sehari (0-23)
  • h - Jam dalam am / pm (1-12)
  • m - Menit dalam jam (0-60)
  • s - Detik dalam satu menit (0-60)

Untuk daftar lengkap simbol yang dapat kita gunakan untuk menentukan pola penguraian, klik di sini.

Jika kita perlu mengubah tanggal java.time menjadi objek java.util.Date yang lebih lama , baca artikel ini untuk lebih jelasnya.

3. Mengubah String ke java.util.Date

Sebelum Java 8, tanggal dan waktu Java mekanisme disediakan oleh API lama java.util.Date , java.util.Calendar , dan java.util.TimeZone kelas yang kadang-kadang kita masih perlu bekerja dengan.

Mari kita lihat cara mengubah String menjadi objek java.util.Date :

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH); String dateInString = "7-Jun-2013"; Date date = formatter.parse(dateInString);

Dalam contoh di atas, pertama-tama kita perlu membuat objek SimpleDateFormat dengan meneruskan pola yang menjelaskan format tanggal dan waktu.

Selanjutnya, kita perlu memanggil metode parse () yang meneruskan String tanggal . Jika argumen String yang diberikan tidak dalam format yang sama dengan pola, maka ParseException akan dilempar.

3.1. Menambahkan Informasi Zona Waktu ke java.util.Date

Penting untuk dicatat bahwa java.util.Date tidak memiliki konsep zona waktu , dan hanya mewakili jumlah detik yang berlalu sejak waktu epoch Unix - 1970-01-01T00: 00: 00Z.

But, when we print the Date object directly, it will always be printed with the Java default system time zone.

In this final example we'll look at how to format a date, adding time zone information:

SimpleDateFormat formatter = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a", Locale.ENGLISH); formatter.setTimeZone(TimeZone.getTimeZone("America/New_York")); String dateInString = "22-01-2015 10:15:55 AM"; Date date = formatter.parse(dateInString); String formattedDateString = formatter.format(date);

We can also change the JVM time zone programmatically, but this isn't recommended:

TimeZone.setDefault(TimeZone.getTimeZone("GMT"));

4. External Libraries

Now that we have a good understanding of how to convert String objects to Date objects using the new and old APIs offered by core Java let's take a look at some external libraries.

4.1. Joda-Time Library

An alternative to the core Java Date and Time library is Joda-Time. Although the authors now recommend users to migrate to java.time (JSR-310) if this isn't possible then the Joda-Time library provides an excellent alternative for working with Date and Time. This library provides pretty much all capabilities supported in the Java 8 Date Time project.

The artifact can be found on Maven Central:

 joda-time joda-time 2.10 

Here’s a quick example working with the standard DateTime:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); String dateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse(dateInString, formatter);

Let's also see an example of explicitly setting a time zone:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); String dateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse(dateInString, formatter); DateTime dateTimeWithZone = dateTime.withZone(DateTimeZone.forID("Asia/Kolkata"));

4.2. Apache Commons Lang – DateUtils

The DateUtils kelas menyediakan banyak utilitas yang berguna sehingga lebih mudah untuk bekerja dengan warisan Kalender dan Tanggal benda .

Artefak commons-lang3 tersedia dari Maven Central:

 org.apache.commons commons-lang3 3.7 

Mari kita ubah String tanggal menggunakan Array pola tanggal menjadi java.util.Date :

String dateInString = "07/06-2013"; Date date = DateUtils.parseDate(dateInString, new String[] { "yyyy-MM-dd HH:mm:ss", "dd/MM-yyyy" });

5. Kesimpulan

Dalam artikel ini, kami mengilustrasikan beberapa cara untuk mengonversi String ke berbagai tipe objek Tanggal (dengan dan tanpa waktu), baik di Java biasa maupun menggunakan pustaka eksternal.

Kode sumber lengkap artikel tersedia di GitHub.