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.
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.
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áulZoneId.of("Asia/Kolkata").Instant— egy gépi időbélyeg, a legközelebbi egyezés azzal, amigetTime()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
Datenélkül<%@ page import="java.util.*" %>nem fordul le, hacsak a program nem rendelkezik a teljes minősítéssel.java.util.Dateki van írva, ahogy az ezen az oldalon található példa is teszi. - Rossz mintabetűk:
mmpercek ésMMhónapok vannak, ésDDaz é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ástimeZonea 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
javaxJSTL 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á.

