JSP Data și ora curente
⚡ Rezumat inteligent
Gestionarea datelor JSP se bazează pe nucleul simplu Java, deci clasa java.util.Date și constructorii săi pot fi apelați direct dintr-un scriptlet sau o etichetă de expresie pentru a afișa data și ora curente pe o pagină.
Gestionarea datei JSP
Cel mai mare avantaj al JSP este că toate metodele de procesare a nucleului Java poate fi utilizat în JSP.
În această secțiune, vom folosi Date clasa a java.util pachet, care conține atât o dată, cât și o oră într-un singur obiect. Clasa este disponibilă pe fiecare JSP page imediat ce pachetul este importat cu o directivă page.
Acceptă doi constructori:
| Constructor | Ce face |
|---|---|
Date() |
Ne oferă data și ora curente. |
Date(long millisec) |
Aceasta ia un parametru de milisecunde care a trecut de la 1 ianuarie 1970. |
Date clasa expune și metodele enumerate mai jos. Java tipurile returnate primitive sunt scrise cu litere mici, așa apar în Java API-ul.
| Metodă | Descriere |
|---|---|
boolean after(Date date) |
Indică dacă această dată cade după parametrul de dată dat. |
boolean before(Date date) |
Indică dacă această dată este anterioară parametrului de dată dat. |
Object clone() |
Creează o copie a obiectului date. |
int compareTo(Date date) |
Compară obiectul clasei de date cu un altul. |
int compareTo(Object date) |
Compară clasa de obiecte object cu un alt obiect. Această supraîncărcare aparține API-ului pre-generic; curent Java expune doar compareTo(Date). |
boolean equals(Object date) |
Verifică dacă două obiecte de tip dată sunt egale. |
long getTime() |
Preia timpul în milisecunde de la 1 ianuarie 1970. |
int hashCode() |
Preia codul hash al datei date. |
void setTime(long time) |
Setează ora obiectului de tip dată dat. |
String toString() |
Convertește obiectul de tip dată într-un obiect de tip șir de caractere. |
Notă: accesorii de câmp ai acestei clase, cum ar fi getYear(), getMonth() și toLocaleString(), au fost depreciate de la JDK 1.1. Clasa în sine funcționează în continuare, dar se așteaptă ca noul cod să utilizeze Calendar, DateFormat, Sau java.time clase descrise mai jos pe această pagină.
Exemplu: Afișarea datei și orei curente în JSP
Exemplu:
În acest exemplu, preluăm data și ora curente folosind obiectul date.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="java.util.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru current Date</title> </head> <body> Today's date: <%= (new java.util.Date()).toLocaleString()%> </body> </html>
Explicația codului:
Code Linia 11: Folosim obiectul date pentru a prelua data și ora curente.
Echivalent modern: Codul de mai sus este păstrat exact așa cum a fost publicat. toLocaleString() a fost înlocuit de DateFormat.format(Date date) începând cu JDK 1.1, deci o pagină curentă ar scrie <%= java.text.DateFormat.getDateTimeInstance().format(new java.util.Date()) %> in schimb. <%= %> Eticheta expresiei în sine rămâne neschimbată.
Când executați codul de mai sus, obțineți următoarea ieșire.
ieșire:
Primim data și ora curente.
Cum se formatează data și ora în JSP
Imprimarea a Date obiectul oferă direct ceea ce produce regionalul implicit, care este rareori formatul de care are nevoie o pagină. Două abordări controlează rezultatul.
Primul menține logica în Java și utilizări SimpleDateFormat, unde fiecare literă a modelului reprezintă o parte a valorii.
<%@ page import="java.util.*, java.text.*" %> <% SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String today = fmt.format(new Date()); %> Today's date: <%= today %>
| Literă model | Sens | Exemplu |
|---|---|---|
yyyy |
An cu patru cifre | 2026 |
MM |
Numărul lunii | 07 |
dd |
Ziua lunii | 29 |
HH |
Oră, ceas de 24 de ore | 18 |
mm |
minute | 45 |
ss |
secunde | 02 |
A doua abordare menține pagina liberă de Java cod și folosește în schimb biblioteca de formatare JSTL, care se potrivește bine cu celelalte Etichete de acțiune JSP.
<%@ taglib prefix="fmt" uri="jakarta.tags.fmt" %> <jsp:useBean id="now" class="java.util.Date" /> <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" />
uri Valoarea afișată mai sus este forma JSTL 3.0 utilizată de Jakarta EE 10 și versiunile ulterioare. Paginile care rulează pe un container mai vechi încă folosesc http://java.sun.com/jsp/jstl/fmt, iar containerele continuă să accepte URI-ul mai vechi pentru compatibilitate. type atribut selectează date, time, both, În timp ce dateStyle, timeStyle și timeZone rafinați rezultatul.
Gestionarea datelor cu API-ul java.time în JSP
Java 8 a introdus java.time pachet și este acum metoda recomandată de a lucra cu date în orice Java cod, inclusiv o pagină JSP. Spre deosebire de Date, aceste clase sunt imuabile și sigure pentru fire de execuție, astfel încât un singur formatator poate fi partajat în siguranță între cereri.
<%@ page import="java.time.*, java.time.format.*" %> <% LocalDateTime now = LocalDateTime.now(); DateTimeFormatter f = DateTimeFormatter.ofPattern("dd MMM yyyy HH:mm"); %> Today's date: <%= f.format(now) %>
Alegeți clasa care corespunde cu ceea ce are nevoie pagina:
LocalDate— o dată fără oră, cum ar fi data nașterii.LocalTime— o oră fără dată, cum ar fi o oră de deschidere.LocalDateTime— o dată și o oră fără fus orar atașat.ZonedDateTime— o dată și o oră legate de o zonă, de exempluZoneId.of("Asia/Kolkata").Instant— o marcă temporală a mașinii, cea mai apropiată potrivire cu ceea cegetTime()se intoarce.
Codul existent nu trebuie rescris dintr-o dată, deoarece Date.from(instant) și date.toInstant() conversia între cele două API-uri.
Erori comune de gestionare a datelor în JSP
O dată care se imprimă corect pe un computer de developare poate fi totuși greșită în producție. Greșelile de mai jos explică majoritatea acestor rapoarte.
- Import lipsă: folosind
Datefără<%@ page import="java.util.*" %>nu reușește să compileze decât dacă este complet calificatjava.util.Dateeste scrisă, așa cum se întâmplă în exemplul de pe această pagină. - Litere din model greșit:
mmeste de minute șiMMeste de luni șiDDeste ziua anului, nu ziua lunii. - Fus orar al serverului:
new Date()reflectă ceasul serverului, nu al vizitatorului. SetațitimeZonepe eticheta de formatare atunci când publicul este în altă parte. - Partajarea unui format SimpleDateFormat: Clasa nu este sigură pentru thread-uri, deci o instanță statică partajată între cereri poate returna ieșire coruptă. Creați una per cerere sau utilizați
DateTimeFormatter. - Pagină goală după o actualizare: un container de pe Jakarta EE 10 respinge vechiul
javaxJSTL jar, astfel încât eticheta de formatare se afișează ca text literal până când artefactele Jakarta sunt la locul lor. - Formatarea unui șir de caractere: o valoare extrasă dintr-un parametru de cerere este text și trebuie analizată cu
parse()înainte ca orice metodă de dată să o accepte.

