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ă.

  • 🔘 Avantaj: Fiecare metodă de core Java rămâne disponibil în interiorul unei pagini JSP fără configurație suplimentară.
  • ☑️ Constructori: Date() returnează momentul curent, în timp ce Date(long) reconstruiește un moment din milisecunde începând cu 1970.
  • ✅ Metode: după, înainte, compareTo, equals, getTime, setTime și toString acoperă majoritatea lucrărilor de comparare.
  • 🧪 Etichetă de expresie: O singură etichetă de expresie imprimă obiectul de tip dată direct în codul HTML generat.
  • 🛠️ Formatare: SimpleDateFormat și eticheta JSTL formatDate controlează exact modul în care apare valoarea.
  • 📊 API modern: Clasele java.time, cum ar fi LocalDateTime, înlocuiesc metodele Date mai vechi marcate ca fiind depreciate.

JSP Data și ora curente

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.

Rezultatul browserului pentru pagina JSP care afișează data și ora curente

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 exemplu ZoneId.of("Asia/Kolkata").
  • Instant — o marcă temporală a mașinii, cea mai apropiată potrivire cu ceea ce getTime() 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 Date fără <%@ page import="java.util.*" %> nu reușește să compileze decât dacă este complet calificat java.util.Date este scrisă, așa cum se întâmplă în exemplul de pe această pagină.
  • Litere din model greșit: mm este de minute și MM este de luni și DD este ziua anului, nu ziua lunii.
  • Fus orar al serverului: new Date() reflectă ceasul serverului, nu al vizitatorului. Setați timeZone pe 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 javax JSTL 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.

Întrebări frecvente

java.util. adăuga <%@ page import="java.util.*" %> în partea de sus a paginii sau scrieți termenul complet calificat java.util.Date în interiorul etichetei expresie, ceea ce face exemplul de pe această pagină.

Asistenții inteligenți artificiali pot traduce un model de format în engleză simplă, pot converti un model mai vechi Date fragment în java.timeși semnalați o problemă de siguranță a firelor de execuție într-un formatator partajat. Testați sugestia, deoarece o literă de model greșită se compilează totuși curat.

Da. Copilotul GitHub completează scriptlet-urile și directivele taglib dintr-un comentariu. Verificați JSTL-ul uri pe care îl produce, deoarece frecvent se folosește implicit versiunea mai veche java.sun.com valoare mai degrabă decât cea din Jakarta.

new Date() citește ceasul și zona implicită a serverului care rulează pagina. Transmite o zonă explicită către formator sau convertește pe client, dacă ora locală a vizitatorului este cea care contează.

getTime() returnează a longmilisecundele scurse de la 1 ianuarie 1970. toString() returnează un șir de caractere lizibil construit din setările regionale implicite. Stochează numărul, afișează șirul de caractere.

Nu. Clasa rămâne acceptată, dar majoritatea accesorilor de câmp au avut un avertisment de depreciere încă de la JDK 1.1. Se așteaptă ca noul cod să utilizeze java.time și Date.from() face legătura între cele două API-uri.

Da. Declarați obiectul cu <jsp:useBean> și randați-l cu JSTL <fmt:formatDate> etichetă. Nu este necesar niciun scriptlet, ceea ce menține markup-ul lizibil și mai ușor de întreținut.

Eticheta expresiei <%= %>Tot ce conține este evaluat și toString() Rezultatul este scris în răspuns, așa cum pagina exemplu afișează data pe o singură linie.

Rezumați această postare cu: