JSP aktuális dátum és idő

⚡ Okos összefoglaló

A JSP dátumkezelése egyszerű magra támaszkodik Java, így a java.util.Date osztály és konstruktorai közvetlenül meghívhatók egy scriptletből vagy egy expression tagből az aktuális dátum és idő kinyomtatásához egy oldalon.

  • 🔘 Előny: Minden magmódszer Java további konfiguráció nélkül elérhető marad egy JSP oldalon belül.
  • ☑️ Kivitelezők: A Date() függvény az aktuális pillanatot adja vissza, míg a Date(long) függvény ezredmásodpercekből újraalkot egy pillanatot 1970 óta.
  • Módszerek: Az after, before, compareTo, equals, getTime, setTime és toString metódusok a legtöbb összehasonlítási feladatot lefedik.
  • 🧪 Kifejezéscímke: Egyetlen kifejezéscímke közvetlenül a létrehozott HTML-be nyomtatja ki a date objektumot.
  • 🇧🇷 Formázás: A SimpleDateFormat és a JSTL formatDate tag szabályozza pontosan, hogyan jelenik meg az érték.
  • 📊 Modern API: A java.time osztályok, mint például a LocalDateTime, lecserélik a régebbi, elavultként megjelölt Date metódusokat.

JSP aktuális dátum és idő

JSP dátumkezelés

A JSP legnagyobb előnye, hogy a mag összes metódusa Java JSP-ben használható.

Ebben a részben a következőt fogjuk használni: Date osztálya a java.util csomag, amely egyetlen objektumban tartalmazza a dátumot és az időpontot. Az osztály minden JSP page, amint a csomag importálásra kerül egy page direktívával.

Két konstruktőrt támogat:

építész Mit csinál
Date() Megadja nekünk az aktuális dátumot és időt.
Date(long millisec) Ez egy milliszekundumos paramétert vesz fel, amely 1970. január 1. óta telt el.

Az Date Az osztály az alább felsorolt ​​metódusokat is elérhetővé teszi. Java A primitív visszatérési típusokat kisbetűvel írjuk, ahogyan a Java API.

Módszer Leírás
boolean after(Date date) Azt jelzi, hogy ez a dátum a megadott dátumparaméter utánra esik-e.
boolean before(Date date) Azt jelzi, hogy ez a dátum a megadott dátumparaméter előtti-e.
Object clone() Létrehoz egy másolatot a dátum objektumról.
int compareTo(Date date) Összehasonlítja a dátumosztályú objektumot egy másikkal.
int compareTo(Object date) Összehasonlítja az object objektumosztállyal egy másikkal. Ez a túlterhelés a pregenerikus API-hoz tartozik; a jelenlegi Java csak leleplezi compareTo(Date).
boolean equals(Object date) Azt ellenőrzi, hogy két dátumobjektum egyenlő-e.
long getTime() 1970. január 1. óta milliszekundumban adja meg az időt.
int hashCode() Lekéri a megadott dátum hash kódját.
void setTime(long time) Beállítja az adott dátumobjektum idejét.
String toString() A date objektumot karakterlánc objektummá alakítja.

Jegyzet: az osztály mezőhozzáférési függvényei, mint például getYear(), getMonth() és a toLocaleString(), elavultak a JDK 1.1 óta. Maga az osztály továbbra is működik, de az új kód várhatóan használni fogja Calendar, DateFormat, Vagy a java.time az oldalon lejjebb leírt osztályok.

Példa: Az aktuális dátum és idő megjelenítése JSP-ben

Példa:

Ebben a példában a date objektum segítségével kérjük le az aktuális dátumot és időt.

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

A kód magyarázata:

Code 11 vonal: A dátum objektumot használjuk az aktuális dátum és idő lekéréséhez.

Modern megfelelője: A fenti kódot pontosan a közzétett formában tároljuk. toLocaleString() helyébe a következő állt DateFormat.format(Date date) a JDK 1.1-től kezdve, tehát egy aktuális oldal írná <%= java.text.DateFormat.getDateTimeInstance().format(new java.util.Date()) %> helyette. Az <%= %> Maga a kifejezéscímke változatlan marad.

Amikor végrehajtja a fenti kódot, a következő kimenetet kapja.

A JSP oldal böngészőkimenete, amely kinyomtatja az aktuális dátumot és időt.

output:

Aktuális dátumot és időt kapunk.

Dátum és idő formázása JSP-ben

Nyomtatás Date Az objektum közvetlenül visszaadja az alapértelmezett területi beállítás által előállított formátumot, ami ritkán egyezik meg egy oldal igényeivel. A kimenetet két megközelítés vezérli.

Az első megtartja a logikát Java és felhasznál SimpleDateFormat, ahol a minta minden betűje az érték egy részét jelöli.

<%@ 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 %>
Minta betű Jelentés Példa
yyyy Négyjegyű év 2026
MM Hónap száma 07
dd A hónap napja 29
HH Óra, 24 órás formátum 18
mm Perc 45
ss Másodperc 02

A második megközelítés mentesen tartja az oldalt Java kódot, és ehelyett a JSTL formázási könyvtárat használja, amely jól illeszkedik a többihez JSP műveleti címkék.

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

Az uri A fent látható érték a Jakarta EE 10 és újabb verziói által használt JSTL 3.0 űrlap. A régebbi konténeren futó oldalak továbbra is használják http://java.sun.com/jsp/jstl/fmt, és a konténerek továbbra is elfogadják a régebbi URI-t a kompatibilitás érdekében. type attribútumkiválasztások date, timevagy both, Míg a dateStyle, timeStyle és a timeZone finomítsd az eredményt.

Dátumok kezelése a java.time API-val JSP-ben

Java 8 bevezette a java.time csomagot, és most már ez az ajánlott módja a dátumok kezelésének bármely Java kód, beleértve egy JSP oldalt is. Ellentétben Date, ezek az osztályok megváltoztathatatlanok és szálbiztosak, így egyetlen formázó biztonságosan megosztható a kérések között.

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

Válaszd ki azt az osztályt, amelyik megfelel annak, amire az oldalnak valójában szüksége van:

  • LocalDate — időpont nélküli dátum, például születési dátum.
  • LocalTime — dátum nélküli időpont, például nyitvatartási idő.
  • LocalDateTime — dátum és időpont időzóna nélkül.
  • ZonedDateTime — egy zónához kötött dátum és idő, például ZoneId.of("Asia/Kolkata").
  • Instant — egy gépi időbélyeg, a legközelebbi egyezés azzal, ami getTime() visszatér.

A meglévő kódot nem kell egyszerre átírni, mert Date.from(instant) és a date.toInstant() konvertáljon a két API között.

Gyakori dátumkezelési hibák JSP-ben

Egy fejlesztői gépen helyesen kinyomtatott dátum éles környezetben is hibás lehet. Az alábbi hibák magyarázzák a legtöbb ilyen jelentést.

  • Hiányzó importálás: segítségével Date nélkül <%@ page import="java.util.*" %> nem fordul le, hacsak a program nem rendelkezik a teljes minősítéssel. java.util.Date ki van írva, ahogy az ezen az oldalon található példa is teszi.
  • Rossz mintabetűk: mm percek és MM hónapok vannak, és DD az év napja, nem pedig a hónap napja.
  • Szerver időzónája: new Date() a szerver óráját tükrözi, nem a látogatóét. Beállítás timeZone a formázási címkén, amikor a közönség máshol van.
  • SimpleDateFormat megosztása: az osztály nem szálbiztos, így egy kérések között megosztott statikus példány sérült kimenetet adhat vissza. Létrehozzon egyet kérésenként, vagy használja a következőt: DateTimeFormatter.
  • Üres oldal frissítés után: egy konténer a Jakarta EE 10-en elutasítja a régit javax JSTL jar fájlok, így a formázó címke literális szövegként jelenik meg, amíg a Jakarta-i műtermékek a helyükre nem kerülnek.
  • Karakterlánc formázása: A kérésparaméterből kinyert érték szöveg, és a következővel kell elemezni: parse() mielőtt bármelyik dátummetódus elfogadná.

GYIK

java.util, hozzáad <%@ page import="java.util.*" %> az oldal tetején, vagy írja be a teljes szöveget java.util.Date a kifejezés címkén belül, ahogyan az ezen az oldalon található példa is teszi.

A mesterséges intelligencia asszisztensei lefordíthatják a formátummintákat egyszerű angolra, átalakíthatják a régebbieket Date részlet java.time, és mutasson rá egy szálbiztonsági problémára egy megosztott formázóban. Teszteld a javaslatot, mert egy rossz mintabetű is tisztán fordul le.

Igen. GitHub másodpilóta egy megjegyzésből kiegészíti a szkriptleteket és a taglib direktívákat. Ellenőrizze a JSTL-t. uri előállítja, mivel gyakran alapértelmezés szerint a régebbi java.sun.com érték helyett a jakartai.

new Date() beolvassa az oldalt futtató szerver óráját és alapértelmezett zónáját. Adjon át egy explicit zónát a formázónak, vagy konvertáljon a kliensen, ha a látogató helyi ideje számít.

getTime() visszaadja a long: az 1970. január 1. óta eltelt milliszekundumok. toString() Egy olvasható karakterláncot ad vissza, amely az alapértelmezett területi beállítások alapján van létrehozva. Tárolja a számot, jelenítse meg a karakterláncot.

Nem. Az osztály továbbra is támogatott, de a legtöbb mezőhozzáférési kódja elavulttá vált a JDK 1.1 óta. Az új kód várhatóan ezt fogja használni: java.timeés Date.from() áthidalja a két API-t.

Igen. Deklarálja az objektumot a következővel: <jsp:useBean> és rendereld a JSTL-lel <fmt:formatDate> tag. Nincs szükség szkriptletre, így a jelölőnyelv olvasható és könnyebben karbantartható marad.

A kifejezéscímke <%= %>Bármit is tartalmaz, azt kiértékelik, és toString() Az eredmény beíródik a válaszba, ahogy a mintaoldal is egyetlen sorba nyomtatja a dátumot.

Foglald össze ezt a bejegyzést a következőképpen: