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.

  • 🔘 Vantaggio: Ogni metodo del nucleo Java rimane disponibile all'interno di una pagina JSP senza necessità di configurazioni aggiuntive.
  • ☑️ Costruttori: Date() restituisce il momento corrente, mentre Date(long) ricostruisce un momento a partire dai millisecondi trascorsi dal 1970.
  • ✅ Metodi: Le funzioni after, before, compareTo, equals, getTime, setTime e toString coprono la maggior parte delle operazioni di confronto.
  • 🧪 Tag di espressione: Un singolo tag di espressione stampa l'oggetto data direttamente nell'HTML generato.
  • ️ Formattazione: SimpleDateFormat e il tag JSTL formatDate controllano esattamente come viene visualizzato il valore.
  • 📊 API moderna: Le classi java.time, come LocalDateTime, sostituiscono i vecchi metodi Date contrassegnati come deprecati.

Data e ora correnti JSP

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.

Output del browser della pagina JSP che visualizza la data e l'ora correnti

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 esempio ZoneId.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 Date senza <%@ page import="java.util.*" %> non riesce a compilare a meno che non sia completamente qualificato java.util.Date viene scritto per esteso, come nell'esempio presente in questa pagina.
  • Lettere con schema errato: mm sono minuti e MM sono mesi e DD è il giorno dell'anno, non il giorno del mese.
  • Fuso orario del server: new Date() riflette l'orologio del server, non quello del visitatore. Imposta timeZone sul 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 javax JSTL 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.

DOMANDE FREQUENTI

java.util. Inserisci <%@ page import="java.util.*" %> in cima alla pagina, oppure scrivi il testo completo java.util.Date all'interno del tag expression, che è ciò che fa l'esempio in questa pagina.

Gli assistenti IA possono tradurre un modello di formato in un linguaggio semplice, convertire un vecchio Date frammento in java.timee segnalare un problema di sicurezza dei thread in un formattatore condiviso. Testare il suggerimento, perché una lettera di pattern errata viene comunque compilata correttamente.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub completa scriptlet e direttive taglib da un commento. Controlla il JSTL uri produce, poiché spesso imposta di default il più vecchio java.sun.com valore piuttosto che quello di Giacarta.

new Date() Legge l'orologio e il fuso orario predefinito del server che esegue la pagina. Se l'ora locale del visitatore è rilevante, è possibile specificare un fuso orario esplicito da passare al formattatore o convertirlo sul client.

getTime() restituisce a long: i millisecondi trascorsi dal 1° gennaio 1970. toString() Restituisce una stringa leggibile creata a partire dalle impostazioni locali predefinite. Memorizza il numero e visualizza la stringa.

No. La classe rimane supportata, ma la maggior parte dei suoi metodi di accesso ai campi presenta un avviso di deprecazione sin da JDK 1.1. Il nuovo codice dovrebbe utilizzare java.timee Date.from() collega le due API.

Sì. Dichiara l'oggetto con <jsp:useBean> e renderizzarlo con il JSTL <fmt:formatDate> tag. Non è richiesto alcuno scriptlet, il che mantiene il markup leggibile e più facile da gestire.

Il tag di espressione <%= %>Qualunque cosa contenga viene valutata e il suo toString() Il risultato viene scritto nella risposta, ed è così che la pagina di esempio stampa la data su una singola riga.

Riassumi questo post con: