Fecha y hora actuales de JSP

⚡ Resumen inteligente

El manejo de fechas de JSP se basa en el núcleo simple. Java, por lo que la clase java.util.Date y sus constructores se pueden llamar directamente desde un scriptlet o una etiqueta de expresión para imprimir la fecha y hora actuales en una página.

  • 🔘 Ventaja: Cada método de núcleo Java permanece disponible dentro de una página JSP sin configuración adicional.
  • ☑️ Constructores: Date() devuelve el momento actual, mientras que Date(long) reconstruye un momento a partir de los milisegundos transcurridos desde 1970.
  • ✅ Métodos: Las funciones after, before, compareTo, equals, getTime, setTime y toString cubren la mayor parte del trabajo de comparación.
  • 🧪 Etiqueta de expresión: Una sola etiqueta de expresión imprime el objeto de fecha directamente en el HTML generado.
  • 🛠️ Formateo: SimpleDateFormat y la etiqueta formatDate de JSTL controlan exactamente cómo aparece el valor.
  • 📊 API moderna: Las clases java.time, como LocalDateTime, reemplazan los métodos Date más antiguos marcados como obsoletos.

Fecha y hora actuales de JSP

Manejo de fechas JSP

La mayor ventaja de JSP es que todos los métodos del núcleo Java Se puede utilizar en JSP.

En esta sección utilizaremos el Date clase de la java.util paquete, que contiene tanto una fecha como una hora en un solo objeto. La clase está disponible en todos JSP página tan pronto como el paquete se importe con una directiva de página.

Admite dos constructores:

Constructor ¿Qué hace?
Date() Nos proporciona la fecha y hora actuales.
Date(long millisec) Esto requiere un parámetro de milisegundos, que es el tiempo transcurrido desde el 1 de enero de 1970.

El Date Esta clase también expone los métodos que se enumeran a continuación. Java Los tipos de retorno primitivos se escriben en minúsculas, que es como aparecen en el Java API.

Método Mareas Ideales para Lecciones
boolean after(Date date) Indica si esta fecha es posterior al parámetro de fecha especificado.
boolean before(Date date) Indica si esta fecha es anterior al parámetro de fecha especificado.
Object clone() Crea una copia del objeto de fecha.
int compareTo(Date date) Compara el objeto de la clase de fecha con otro.
int compareTo(Object date) Se compara con el objeto de la clase objeto con otro. Esta sobrecarga pertenece a la API pre-genérica; actual Java expone únicamente compareTo(Date).
boolean equals(Object date) Comprueba si dos objetos de fecha son iguales.
long getTime() Obtiene la hora en milisegundos desde el 1 de enero de 1970.
int hashCode() Obtiene el código hash de la fecha indicada.
void setTime(long time) Establece la hora del objeto de fecha dado.
String toString() Convierte el objeto de fecha en un objeto de cadena.

Nota: los accesores de campo de esta clase, como getYear(), getMonth() y toLocaleString(), han sido obsoletos desde JDK 1.1. La clase en sí todavía funciona, pero se espera que el código nuevo utilice Calendar, DateFormat, o el java.time Las clases se describen más abajo en esta página.

Ejemplo: Mostrar la fecha y hora actuales en JSP

Ejemplo:

En este ejemplo, estamos obteniendo la fecha y hora actuales utilizando un objeto de fecha.

<%@ 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>

Explicación del código:

Code Línea 11: Estamos utilizando el objeto de fecha para recuperar la fecha y hora actuales.

Equivalente moderno: El código anterior se mantiene exactamente como se publicó. toLocaleString() fue reemplazado por DateFormat.format(Date date) a partir de JDK 1.1, por lo que una página actual escribiría <%= java.text.DateFormat.getDateTimeInstance().format(new java.util.Date()) %> en lugar. los <%= %> La etiqueta de expresión en sí no ha sufrido cambios.

Cuando ejecuta el código anterior, obtiene el siguiente resultado.

Salida del navegador de la página JSP que imprime la fecha y hora actuales.

Salida:

Estamos obteniendo la fecha y hora actuales.

Cómo formatear la fecha y la hora en JSP

Imprimiendo un Date El objeto proporciona directamente lo que produce la configuración regional predeterminada, que rara vez es el formato que necesita una página. Dos enfoques controlan la salida.

El primero mantiene la lógica en Java y utiliza SimpleDateFormatdonde cada letra del patrón representa una parte del valor.

<%@ 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 %>
Letra de patrón Significado Ejemplo
yyyy Año de cuatro dígitos 2026
MM Número de mes 07
dd Dia del mes 29
HH Hora, reloj de 24 horas 18
mm Minutos 45
ss Segundos 02

El segundo enfoque mantiene la página libre de Java en lugar de usar el código, utiliza la biblioteca de formato JSTL, que se combina bien con la otra. etiquetas de acción 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" />

El uri El valor que se muestra arriba es el formato JSTL 3.0 utilizado por Jakarta EE 10 y versiones posteriores. Las páginas que se ejecutan en un contenedor más antiguo todavía utilizan http://java.sun.com/jsp/jstl/fmty los contenedores siguen aceptando la URI antigua por compatibilidad. type selección de atributos date, time, o both, mientras dateStyle, timeStyle y timeZone refinar el resultado.

Manejo de fechas con la API java.time en JSP

Java 8 introdujo el java.time paquete, y ahora es la forma recomendada de trabajar con fechas en cualquier Java código, incluyendo una página JSP. A diferencia de DateEstas clases son inmutables y seguras para subprocesos, por lo que un único formateador puede compartirse de forma segura entre diferentes solicitudes.

<%@ 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) %>

Seleccione la clase que mejor se ajuste a las necesidades de la página:

  • LocalDate — una fecha sin hora, como una fecha de nacimiento.
  • LocalTime — un momento sin fecha, como por ejemplo la hora de apertura.
  • LocalDateTime — una fecha y hora sin zona horaria asociada.
  • ZonedDateTime — una fecha y hora vinculadas a una zona, por ejemplo ZoneId.of("Asia/Kolkata").
  • Instant — una marca de tiempo de la máquina, la coincidencia más cercana a lo que getTime() devoluciones.

El código existente no tiene que reescribirse de una sola vez, porque Date.from(instant) y date.toInstant() convertir entre las dos API.

Errores comunes en el manejo de fechas en JSP

Una fecha que se imprime correctamente en una máquina de desarrollo puede ser errónea en producción. Los errores que se describen a continuación son la causa de la mayoría de esos problemas.

  • Importación faltante: usando Date sin <%@ page import="java.util.*" %> no se compila a menos que esté completamente calificado java.util.Date está escrito, como se muestra en el ejemplo de esta página.
  • Letras de patrón incorrecto: mm son minutos y MM son meses, y DD es día del año en lugar de día del mes.
  • Zona horaria del servidor: new Date() Refleja el reloj del servidor, no el del visitante. Establecer timeZone en la etiqueta de formato cuando la audiencia está en otro lugar.
  • Compartir un formato de fecha simple: La clase no es segura para subprocesos, por lo que una instancia estática compartida entre solicitudes puede devolver una salida corrupta. Cree una por solicitud o utilice DateTimeFormatter.
  • Página en blanco después de una actualización: un contenedor en Jakarta EE 10 rechaza el antiguo javax Los archivos JAR de JSTL hacen que la etiqueta de formato se muestre como texto literal hasta que los artefactos de Jakarta estén en su lugar.
  • Formatear una cadena: un valor extraído de un parámetro de solicitud es texto y debe ser analizado con parse() antes de que cualquier método de fecha lo acepte.

Preguntas Frecuentes

java.util. Añadir <%@ page import="java.util.*" %> en la parte superior de la página, o escriba el nombre completo java.util.Date dentro de la etiqueta de expresión, que es lo que hace el ejemplo de esta página.

Los asistentes de IA pueden traducir un patrón de formato a inglés simple, convertir un formato antiguo Date fragmento en java.timey señala un problema de seguridad de subprocesos en un formateador compartido. Prueba la sugerencia, porque una letra de patrón incorrecta aún se compila correctamente.

Sí. Copiloto de GitHub Completa los scriptlets y las directivas taglib a partir de un comentario. Consulta el JSTL. uri produce, ya que frecuentemente recurre por defecto al más antiguo java.sun.com valor en lugar del de Yakarta.

new Date() Lee la hora y la zona horaria predeterminada del servidor que ejecuta la página. Si lo que importa es la hora local del visitante, pásale una zona horaria explícita al formateador o conviértela en el cliente.

getTime() devuelve un long: los milisegundos transcurridos desde el 1 de enero de 1970. toString() Devuelve una cadena legible construida a partir de la configuración regional predeterminada. Almacena el número y muestra la cadena.

No. La clase sigue siendo compatible, pero la mayoría de sus accesores de campo han tenido una advertencia de obsolescencia desde JDK 1.1. Se espera que el nuevo código utilice java.time, y Date.from() Establece un puente entre las dos API.

Sí. Declara el objeto con <jsp:useBean> y renderizarlo con JSTL <fmt:formatDate> etiqueta. No se requiere ningún scriptlet, lo que mantiene el marcado legible y más fácil de mantener.

La etiqueta de expresión <%= %>. Todo lo que contiene es evaluado y su toString() El resultado se escribe en la respuesta, que es como la página de ejemplo imprime la fecha en una sola línea.

Resumir este post con: