Aktuální datum a čas JSP
⚡ Chytré shrnutí
Zpracování dat v JSP se spoléhá na prosté jádro Java, takže třídu java.util.Date a její konstruktory lze volat přímo ze skriptletu nebo tagu výrazu pro výpis aktuálního data a času na stránku.
JSP Date Handling
Největší výhodou JSP je, že všechny metody jádra Java lze použít v JSP.
V této části budeme používat Date třídy java.util balíček, který obsahuje datum i čas v jednom objektu. Třída je k dispozici na každém JSP page, jakmile je balíček importován pomocí direktivy page.
Podporuje dva konstruktory:
| Stavitel | Co to dělá |
|---|---|
Date() |
Udává nám aktuální datum a čas. |
Date(long millisec) |
Toto bere parametr milisekund, které uplynuly od 1. ledna 1970. |
Jedno Date třída také zpřístupňuje níže uvedené metody. Java Primitivní návratové typy se píší malými písmeny, a tak se zobrazují i v Java API.
| Metoda | Description |
|---|---|
boolean after(Date date) |
Určuje, zda toto datum spadá po daném parametru data. |
boolean before(Date date) |
Určuje, zda toto datum předchází danému parametru data. |
Object clone() |
Vytvoří kopii objektu data. |
int compareTo(Date date) |
Porovnává objekt třídy date s jiným objektem. |
int compareTo(Object date) |
Porovnává objekt třídy object s jiným objektem. Toto přetížení patří do pre-generického API; aktuální Java pouze odhaluje compareTo(Date). |
boolean equals(Object date) |
Kontroluje, zda jsou dva objekty data stejné. |
long getTime() |
Načítá čas v milisekundách od 1. ledna 1970. |
int hashCode() |
Načte hash kód daného data. |
void setTime(long time) |
Nastavuje čas daného objektu data. |
String toString() |
Převede objekt data na objekt typu string. |
Poznámka: přístupové objekty polí této třídy, jako například getYear(), getMonth() a toLocaleString(), jsou od verze JDK 1.1 zastaralé. Samotná třída stále funguje, ale očekává se, že nový kód bude používat Calendar, DateFormat, Nebo java.time třídy popsané dále na této stránce.
Příklad: Zobrazení aktuálního data a času v JSP
Příklad:
V tomto příkladu načítáme aktuální datum a čas pomocí objektu date.
<%@ 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>
Vysvětlení kódu:
Code Řádek 11: K načtení aktuálního data a času používáme objekt data.
Moderní ekvivalent: Výše uvedený kód je zachován přesně tak, jak byl publikován. toLocaleString() byl nahrazen DateFormat.format(Date date) od verze JDK 1.1, takže aktuální stránka by psala <%= java.text.DateFormat.getDateTimeInstance().format(new java.util.Date()) %> namísto. <%= %> Samotný tag výrazu zůstává nezměněn.
Když spustíte výše uvedený kód, získáte následující výstup.
Výstup:
Získáváme aktuální datum a čas.
Jak formátovat datum a čas v JSP
Tisk Date Objekt přímo vrací to, co vygeneruje výchozí locale, což je zřídka formát, který stránka potřebuje. Výstup řídí dva přístupy.
První zachovává logiku Java a použití SimpleDateFormat, kde každé písmeno vzoru představuje jednu část hodnoty.
<%@ 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 %>
| Vzor písmene | Význam | Příklad |
|---|---|---|
yyyy |
Čtyřmístný rok | 2026 |
MM |
Číslo měsíce | 07 |
dd |
den v měsíci | 29 |
HH |
Hodina, 24hodinový formát | 18 |
mm |
Minuty | 45 |
ss |
Sekundy | 02 |
Druhý přístup udržuje stránku bez Java kód a místo toho používá formátovací knihovnu JSTL, která se dobře hodí k ostatním Značky akcí 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" />
Jedno uri Výše uvedená hodnota je formát JSTL 3.0 používaný systémem Jakarta EE 10 a novějšími verzemi. Stránky běžící na starším kontejneru stále používají http://java.sun.com/jsp/jstl/fmta kontejnery nadále přijímají starší URI z důvodu kompatibility. type atribut vybírá date, timenebo both, Zatímco dateStyle, timeStyle a timeZone upřesnit výsledek.
Zpracování dat pomocí API Java.time v JSP
Java 8 představil java.time balíček a nyní je to doporučený způsob práce s daty v jakémkoli Java kód, včetně stránky JSP. Na rozdíl od DateTyto třídy jsou neměnné a bezpečné pro práci z více vláken, takže jeden formátovací modul lze bezpečně sdílet mezi požadavky.
<%@ 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) %>
Vyberte třídu, která odpovídá tomu, co stránka skutečně potřebuje:
LocalDate— datum bez časového údaje, například datum narození.LocalTime— čas bez data, například otevírací doba.LocalDateTime— datum a čas bez připojeného časového pásma.ZonedDateTime— například datum a čas vázané na určitou zónuZoneId.of("Asia/Kolkata").Instant— časové razítko stroje, nejbližší shoda s tím, cogetTime()vrátí se.
Stávající kód není nutné přepisovat najednou, protože Date.from(instant) a date.toInstant() převádět mezi těmito dvěma API.
Běžné chyby při zpracování dat v JSP
Datum, které se na vývojářském počítači vytiskne správně, může být v produkčním prostředí stále chybné. Níže uvedené chyby vysvětlují většinu těchto hlášení.
- Chybí import: použitím
Datebez<%@ page import="java.util.*" %>kompilace se nepodaří, pokud není plně kvalifikovanýjava.util.Dateje zapsáno, jak je uvedeno v příkladu na této stránce. - Špatný vzor písmen:
mmje minut aMMje měsíců aDDje den v roce, nikoli den v měsíci. - Časové pásmo serveru:
new Date()odráží čas serveru, nikoli návštěvníka. NastavtetimeZonena formátovacím tagu, když se cílová skupina nachází jinde. - Sdílení SimpleDateFormat: Třída není bezpečná pro přístup z více vláken, takže statická instance sdílená napříč požadavky může vrátit poškozený výstup. Vytvořte jednu instanci pro každý požadavek nebo použijte
DateTimeFormatter. - Prázdná stránka po aktualizaci: kontejner na Jakartě EE 10 odmítá starý
javaxJSTL JAR soubory, takže formátovací tag se vykreslí jako doslovný text, dokud nebudou na místě artefakty Jakarty. - Formátování řetězce: Hodnota získaná z parametru požadavku je text a musí být analyzována pomocí
parse()než to jakákoli metoda data přijme.

