Kako raditi s datumima u majčinoj dušici
1. Uvod
Thymeleaf je Java mehanizam predložaka dizajniran za izravni rad s Springom. Za uvod u majčinu dušicu i proljeće, pogledajte ovaj spis.
Pored ovih osnovnih funkcija, Thymeleaf nam nudi i niz pomoćnih objekata koji će nam pomoći u izvršavanju uobičajenih zadataka u našoj aplikaciji.
U ovom ćemo članku razgovarati o obradi i formatiranju nove i stare Java Datum klase s pregršt značajki Thymeleaf 3.0.
2. Ovisnosti Mavena
Prvo, pogledajmo konfiguraciju potrebnu za integriranje Thymeleaf-a s Springom u naš pom.xml:
timijanov list orgy 3.0.11.OSLOBODITI timijanov list-proljeće5 3.0.11.
Najnovije verzije majčina dušica i majčina dušica-proljeće5 možete pronaći na Maven Central. Za projekt Spring 4, majčina dušica-proljeće4 knjižnica se mora koristiti umjesto majčina dušica-proljeće5.
Štoviše, za rad s novom Java 8 Datum klase, našoj ćemo dodati sljedeću ovisnost pom.xml:
org.thymeleaf.extras majčina dušica-dodaci-java8time 3.0.4.OBLAŽENJE
The dodaci majčine dušice je neobavezni modul, u potpunosti podržan od službenog tima Thymeleaf, koji je stvoren za kompatibilnost s Java 8 Time API. Dodaje #privremeni prigovoriti na Kontekst kao procesor uslužnog objekta tijekom evaluacija izraza. To znači da se može koristiti za procjenu izraza u objektno-grafičkom navigacijskom jeziku (OGNL) i proljetnom jeziku izraza (SpringEL).
3. Staro i novo: java.util i java.vrijeme
The Vrijeme paket novi je API za datum, vrijeme i kalendar za platformu Java SE. Glavna razlika između starog nasljeđa Datum i jest da novi API razlikuje između strojnog i ljudskog pogleda na vremensku traku. Strojni prikaz otkriva slijed integralnih vrijednosti u odnosu na epoha, dok pogled otkriva skup polja (npr. godinu ili dan).
Za rad s novim Vrijeme paket, moramo konfigurirati naš mehanizam predloška da koristi novi Java8TimeDialect:
privatni ISpringTemplateEngine templateEngine (ITemplateResolver templateResolver) {SpringTemplateEngine engine = novi SpringTemplateEngine (); engine.addDialect (novi Java8TimeDialect ()); engine.setTemplateResolver (templateResolver); povratni motor; }
Ovo će dodati #privremeni objekt sličan onima u standardnom dijalektu, omogućujući formatiranje i stvaranje Vremenski predmeti s predložaka majčine dušice.
Kako bismo testirali obradu novih i starih klasa, stvorit ćemo sljedeće varijable i dodati ih kao objekt modela u našu klasu kontrolera:
model.addAttribute ("standardniDate", novi Datum ()); model.addAttribute ("localDateTime", LocalDateTime.now ()); model.addAttribute ("localDate", LocalDate.now ()); model.addAttribute ("vremenska oznaka", Instant.now ());
Sada smo spremni za upotrebu Izraz i PrivremeneUslužni objekti osigurao Timileaf.
3.1. Datum formatiranja
Prva funkcija koju želimo pokriti je oblikovanje a Datum objekt (koji se dodaje parametrima modela Spring). Odlučili smo koristiti ISO8601 format:
Bez obzira na naše Datum je postavljen na stražnjoj strani, prikazat će se u skladu s odabranim standardom. The standardDate obrađivat će #datumi korisnost. Novi LocalDateTime,LocalDate i Trenutak klase će obrađivati #privremeni korisnost. Ovo je konačni rezultat koji ćemo vidjeti u pregledniku:
Ovo je konačni rezultat koji ćemo vidjeti u pregledniku:
Štoviše, ako želimo format postaviti ručno, to možemo učiniti pomoću:
Kao što možemo primijetiti, ne možemo obraditi Trenutak razred s #temporals.format (…) - rezultirat će u UnsupportedTemporalTypeException. Štoviše, formatiranje LocalDate je moguće samo ako navedemo samo određena polja datuma, preskačući vremenska polja.
Konačni rezultat:
3.2. Nabavite određena polja datuma
Da bi se dobila posebna polja java.util.Datum klase, trebali bismo koristiti sljedeće uslužne objekte:
$ {# datumi.dan (datum)} $ {# datumi.mesec (datum)} $ {# datumi.mesecName (datum)} $ {# datumi.mesecNameShort (datum)} $ {# datumi.godina (datum)} $ {# date.dayOfWeek (date)} $ {# date.dayOfWeekName (date)} $ {# date.dayOfWeekNameShort (date)} $ {# date.hour (date)} $ {# date.minute (date)} $ {# datumi.sekunda (datum)} $ {# datumi.milisekunda (datum)}
Za novo java.vrijeme paketa, trebali bismo se držati #privremeni komunalne usluge:
$ {# 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)}
Pogledajmo nekoliko primjera. Prvo, pokažimo današnji dan u tjednu:
Dalje, pokažimo naziv radnog dana:
I na kraju, pokažimo trenutnu sekundu dana:
Imajte na umu da biste za rad s vremenskim dijelovima trebali koristiti LocalDateTime, kao LocalDate bacit će pogrešku.
4. Zaključak
U ovom smo brzom vodiču razgovarali o Javi Datum značajke obrade implementirane u okviru Thymeleaf, verzija 3.0.
Potpunu implementaciju ovog vodiča možete pronaći u projektu GitHub - ovo je projekt zasnovan na Mavenu koji se lako uvozi i izvodi.
Kako testirati? Naš je prijedlog da se prvo poigrate kodom u pregledniku, a zatim provjerite i naše postojeće JUnit testove.
Napominjemo da naši primjeri ne obuhvaćaju sve dostupne opcije u majčinoj dušici. Ako želite naučiti o svim vrstama uslužnih programa, pogledajte naš članak koji govori o izrazima proljeća i majčine dušice.