Cara Bekerja dengan Tanggal di Timeleaf

1. Perkenalan

Thymeleaf adalah mesin template Java yang dirancang untuk bekerja langsung dengan Spring. Untuk pengantar Thymeleaf dan Spring, lihat artikel ini.

Selain fungsi-fungsi dasar ini, Thymeleaf menawarkan kita sekumpulan objek utilitas yang akan membantu kita melakukan tugas-tugas umum dalam aplikasi kita.

Pada artikel ini, kita akan membahas pemrosesan dan pemformatan kelas Java Date baru dan lama dengan beberapa fitur Thymeleaf 3.0.

2. Ketergantungan Maven

Pertama, mari kita lihat konfigurasi yang diperlukan untuk mengintegrasikan Thymeleaf dengan Spring ke pom.xml kita :

 org.thymeleaf thymeleaf 3.0.11.RELEASE   org.thymeleaf thymeleaf-spring5 3.0.11.RELEASE 

Versi terbaru dari thymeleaf dan thymeleaf-spring5 dapat ditemukan di Maven Central. Perhatikan bahwa, untuk proyek Spring 4, perpustakaan thymeleaf-spring4 harus digunakan sebagai ganti thymeleaf-spring5 .

Selain itu, untuk bekerja dengan kelas Tanggal Java 8 baru , kami akan menambahkan ketergantungan berikut ke pom.xml kami :

 org.thymeleaf.extras thymeleaf-extras-java8time 3.0.4.RELEASE 

The thymeleaf tambahan merupakan modul opsional, didukung penuh oleh tim Thymeleaf resmi, yang diciptakan untuk kompatibilitas dengan Java 8 Waktu API. Ini menambahkan objek temporer # ke Konteks sebagai pemroses objek utilitas selama evaluasi ekspresi. Ini berarti dapat digunakan untuk mengevaluasi ekspresi dalam Object-Graph Navigation Language (OGNL) dan Spring Expression Language (SpringEL).

3. Lama dan Baru: java.util dan java.time

The Waktu paket adalah API tanggal, waktu, dan kalender baru untuk platform Java SE. Perbedaan utama antara Tanggal lama dan adalah bahwa API baru membedakan antara tampilan mesin dan manusia dari sebuah timeline. Tampilan mesin mengungkapkan urutan nilai integral relatif terhadap zaman, sedangkan tampilan mengungkapkan sekumpulan bidang (misalnya, tahun atau hari).

Untuk bekerja dengan paket Time baru , kita perlu mengkonfigurasi mesin template kita untuk menggunakan Java8TimeDialect baru :

private ISpringTemplateEngine templateEngine(ITemplateResolver templateResolver) { SpringTemplateEngine engine = new SpringTemplateEngine(); engine.addDialect(new Java8TimeDialect()); engine.setTemplateResolver(templateResolver); return engine; }

Ini akan menambahkan objek # temporals yang mirip dengan yang ada di Dialek Standar, memungkinkan pemformatan dan pembuatan objek Temporal dari templat Thymeleaf.

Untuk menguji pemrosesan kelas baru dan lama, kita akan membuat variabel berikut dan menambahkannya sebagai objek model ke kelas pengontrol kita:

model.addAttribute("standardDate", new Date()); model.addAttribute("localDateTime", LocalDateTime.now()); model.addAttribute("localDate", LocalDate.now()); model.addAttribute("timestamp", Instant.now());

Sekarang kita siap menggunakan Objek Utilitas Ekspresi dan Temporal yang disediakan oleh Thymeleaf.

3.1. Format Tanggal

Fungsi pertama yang ingin kita bahas adalah pemformatan objek Tanggal (yang ditambahkan ke parameter model Pegas). Kami memutuskan untuk menggunakan format ISO8601 :

Tidak peduli bagaimana Tanggal kami ditetapkan di sisi belakang, itu akan ditampilkan sesuai dengan standar yang dipilih. The standardDate akan diproses oleh # tanggal utilitas. Baru LocalDateTime, LOCALDATE dan Instant kelas akan diproses oleh # pelipis utilitas. Ini adalah hasil akhir yang akan kita lihat di browser:

Ini adalah hasil akhir yang akan kita lihat di browser:

Selain itu, jika kita ingin mengatur format secara manual, kita dapat melakukannya dengan menggunakan:

Seperti yang bisa kita amati, kita tidak bisa memproses kelas Instan dengan # temporals.format (…) - ini akan menghasilkan UnsupportedTemporalTypeException . Selain itu, memformat LocalDate hanya mungkin jika kita hanya menentukan bidang tanggal tertentu, melewatkan bidang waktu.

Hasil akhir:

3.2. Dapatkan Bidang Tanggal Tertentu

Untuk mendapatkan field spesifik dari kelas java.util.Date , kita harus menggunakan objek utilitas berikut:

${#dates.day(date)} ${#dates.month(date)} ${#dates.monthName(date)} ${#dates.monthNameShort(date)} ${#dates.year(date)} ${#dates.dayOfWeek(date)} ${#dates.dayOfWeekName(date)} ${#dates.dayOfWeekNameShort(date)} ${#dates.hour(date)} ${#dates.minute(date)} ${#dates.second(date)} ${#dates.millisecond(date)}

Untuk paket java.time yang baru , kita harus tetap menggunakan # utilitas temporals :

${#temporals.day(date)} ${#temporals.month(date)} ${#temporals.monthName(date)} ${#temporals.monthNameShort(date)} ${#temporals.year(date)} ${#temporals.dayOfWeek(date)} ${#temporals.dayOfWeekName(date)} ${#temporals.dayOfWeekNameShort(date)} ${#temporals.hour(date)} ${#temporals.minute(date)} ${#temporals.second(date)} ${#temporals.millisecond(date)}

Mari kita lihat beberapa contoh. Pertama, mari tunjukkan hari ini dalam seminggu:

Selanjutnya, mari tunjukkan nama hari kerja:

And finally, let's show the current second of the day:

Please note that in order to work with time parts, you would need to use LocalDateTime, as LocalDate will throw an error.

4. Conclusion

In this quick tutorial, we discussed Java Date processing features implemented in the Thymeleaf framework, version 3.0.

The full implementation of this tutorial can be found in the GitHub project – this is a Maven-based project that is easy to import and run.

How to test? Our suggestion is to play with the code in a browser first, then check our existing JUnit tests as well.

Harap perhatikan bahwa contoh kami tidak mencakup semua opsi yang tersedia di Thymeleaf. Jika Anda ingin mempelajari tentang semua jenis utilitas, lihat artikel kami yang mencakup Ekspresi Musim Semi dan Daun Daun.