Data e ora correnti JSP
⚡ Riepilogo intelligente
La gestione delle date in JSP si basa sul core semplice JavaPertanto, la classe java.util.Date e i suoi costruttori possono essere richiamati direttamente da uno scriptlet o da un tag di espressione per stampare la data e l'ora correnti su una pagina.
Gestione della data JSP
Il vantaggio più grande di JSP è che tutti i metodi del core Java può essere utilizzato in JSP.
In questa sezione utilizzeremo il Date classe del java.util pacchetto, che contiene sia una data che un'ora in un unico oggetto. La classe è disponibile su ogni JSP pagina non appena il pacchetto viene importato con una direttiva di pagina.
Supporta due costruttori:
| Costruttore | Ciò che fa |
|---|---|
Date() |
Ci fornisce la data e l'ora attuali. |
Date(long millisec) |
Questo parametro richiede i millisecondi trascorsi dal 1° gennaio 1970. |
Migliori Date La classe espone anche i metodi elencati di seguito. Java i tipi di ritorno primitivi sono scritti in minuscolo, ed è così che appaiono nel Java API.
| Metodo | Descrizione |
|---|---|
boolean after(Date date) |
Indica se questa data è successiva al parametro di data specificato. |
boolean before(Date date) |
Indica se questa data è precedente al parametro di data specificato. |
Object clone() |
Crea una copia dell'oggetto data. |
int compareTo(Date date) |
Confronta l'oggetto della classe data con un altro. |
int compareTo(Object date) |
Confronta l'oggetto della classe object con un altro. Questo overload appartiene all'API pre-generics; corrente Java espone solo compareTo(Date). |
boolean equals(Object date) |
Questo controllo verifica se due oggetti data sono uguali. |
long getTime() |
Calcola il tempo in millisecondi a partire dal 1° gennaio 1970. |
int hashCode() |
Recupera il codice hash della data specificata. |
void setTime(long time) |
Imposta l'ora dell'oggetto data specificato. |
String toString() |
Converte l'oggetto data in un oggetto stringa. |
Nota: gli accessor di campo di questa classe, come getYear(), getMonth() and toLocaleString(), sono stati deprecati a partire da JDK 1.1. La classe stessa funziona ancora, ma ci si aspetta che il nuovo codice utilizzi Calendar, DateFormato java.time corsi descritti più avanti in questa pagina.
Esempio: visualizzare la data e l'ora correnti in JSP
Esempio:
In questo esempio, recuperiamo la data e l'ora correnti utilizzando un oggetto data.
<%@ 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>
Spiegazione del codice:
Code Linea 11: Stiamo utilizzando l'oggetto data per recuperare la data e l'ora correnti.
Equivalente moderno: Il codice sopra riportato viene mantenuto esattamente come pubblicato. toLocaleString() È stato sostituito da DateFormat.format(Date date) a partire da JDK 1.1, quindi una pagina corrente scriverebbe <%= java.text.DateFormat.getDateTimeInstance().format(new java.util.Date()) %> anziché. Il <%= %> Il tag di espressione in sé rimane invariato.
Quando si esegue il codice sopra riportato, si ottiene il seguente output.
Produzione:
Stiamo ottenendo la data e l'ora correnti.
Come formattare data e ora in JSP
Stampa di un Date L'oggetto restituisce direttamente il formato prodotto dalle impostazioni locali predefinite, che raramente corrisponde al formato richiesto dalla pagina. Due approcci controllano l'output.
Il primo mantiene la logica in Java e usi SimpleDateFormat, dove ogni lettera dello schema rappresenta una parte del valore.
<%@ 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 %>
| Lettera modello | Significato | Esempio |
|---|---|---|
yyyy |
Anno a quattro cifre | 2026 |
MM |
Numero del mese | 07 |
dd |
Giorno del mese | 29 |
HH |
Ora, orologio a 24 ore | 18 |
mm |
Minuti | 45 |
ss |
secondi | 02 |
Il secondo approccio mantiene la pagina libera da Java codice e utilizza invece la libreria di formattazione JSTL, che si abbina bene con l'altro Tag di azione 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" />
Migliori uri Il valore mostrato sopra è il formato JSTL 3.0 utilizzato da Jakarta EE 10 e versioni successive. Le pagine in esecuzione su un container più vecchio utilizzano ancora http://java.sun.com/jsp/jstl/fmte i container continuano ad accettare l'URI più vecchio per compatibilità. type selezione degli attributi date, time, o both mentre la lavorazione del prodotto finito avviene negli stabilimenti del nostro partner dateStyle, timeStyle and timeZone perfezionare il risultato.
Gestione delle date con l'API java.time in JSP
Java 8 ha introdotto il java.time pacchetto, ed è ora il modo consigliato per lavorare con le date in qualsiasi Java codice, inclusa una pagina JSP. A differenza DateQueste classi sono immutabili e thread-safe, quindi un singolo formattatore può essere condiviso in modo sicuro tra diverse richieste.
<%@ 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) %>
Seleziona la classe che meglio corrisponde alle esigenze specifiche della pagina:
LocalDate— una data senza indicazione oraria, come ad esempio una data di nascita.LocalTime— un orario senza data, come ad esempio l'orario di apertura.LocalDateTime— una data e un'ora senza fuso orario.ZonedDateTime— una data e un'ora legate a un fuso orario, ad esempioZoneId.of("Asia/Kolkata").Instant— un timestamp della macchina, la corrispondenza più vicina a ciògetTime()ritorna.
Il codice esistente non deve essere riscritto tutto in una volta, perché Date.from(instant) and date.toInstant() convertire tra le due API.
Errori comuni nella gestione delle date in JSP
Una data che viene stampata correttamente su una macchina di sviluppo può comunque risultare errata in produzione. Gli errori elencati di seguito sono responsabili della maggior parte di queste segnalazioni.
- Importazione mancante: utilizzando
Datesenza<%@ page import="java.util.*" %>non riesce a compilare a meno che non sia completamente qualificatojava.util.Dateviene scritto per esteso, come nell'esempio presente in questa pagina. - Lettere con schema errato:
mmsono minuti eMMsono mesi eDDè il giorno dell'anno, non il giorno del mese. - Fuso orario del server:
new Date()riflette l'orologio del server, non quello del visitatore. ImpostatimeZonesul tag di formattazione quando il pubblico si trova altrove. - Condivisione di un SimpleDateFormat: la classe non è thread-safe, quindi un'istanza statica condivisa tra le richieste può restituire un output corrotto. Creane una per richiesta oppure usa
DateTimeFormatter. - Pagina vuota dopo l'aggiornamento: un container su Jakarta EE 10 rifiuta il vecchio
javaxJSTL jar, quindi il tag di formattazione viene visualizzato come testo letterale finché gli artefatti Jakarta non sono al loro posto. - Formattazione di una stringa: un valore estratto da un parametro di richiesta è testo e deve essere analizzato con
parse()prima che qualsiasi metodo di data lo accetti.

