JSP Bieżąca data i godzina
⚡ Inteligentne podsumowanie
Obsługa dat w JSP opiera się na prostym rdzeniu Java, dzięki czemu klasę java.util.Date i jej konstruktory można wywołać bezpośrednio ze skryptletu lub znacznika wyrażenia, aby wydrukować bieżącą datę i godzinę na stronie.
Obsługa dat JSP
Największą zaletą JSP jest to, że wszystkie metody rdzenia Java można używać w JSP.
W tej sekcji będziemy używać Date klasa java.util Pakiet, który przechowuje datę i godzinę w jednym obiekcie. Klasa jest dostępna na każdym JSP stronę zaraz po zaimportowaniu pakietu za pomocą dyrektywy page.
Obsługuje dwa konstruktory:
| Konstruktor | Co to robi |
|---|---|
Date() |
Podaje nam aktualną datę i godzinę. |
Date(long millisec) |
Przyjmuje parametr milisekund, które upłynęły od 1 stycznia 1970 r. |
Date Klasa udostępnia również metody wymienione poniżej. Java typy zwracane prymitywne są pisane małymi literami, tak jak pojawiają się w Java API.
| Metoda wykonania | OPIS |
|---|---|
boolean after(Date date) |
Informuje, czy data ta przypada po podanym parametrze daty. |
boolean before(Date date) |
Informuje, czy data ta przypada przed podanym parametrem daty. |
Object clone() |
Tworzy kopię obiektu daty. |
int compareTo(Date date) |
Porównuje obiekt klasy daty z innym obiektem klasy. |
int compareTo(Object date) |
Porównuje obiekt klasy obiektów z innym obiektem. To przeciążenie należy do API pregenerycznego; obecnie Java ujawnia tylko compareTo(Date). |
boolean equals(Object date) |
Sprawdza czy dwa obiekty daty są równe. |
long getTime() |
Pobiera czas w milisekundach od 1 stycznia 1970 r. |
int hashCode() |
Pobiera kod skrótu podanej daty. |
void setTime(long time) |
Ustawia czas podanego obiektu daty. |
String toString() |
Konwertuje obiekt daty na obiekt ciągu znaków. |
Uwaga: akcesory pola tej klasy, takie jak getYear(), getMonth() oraz toLocaleString(), zostały wycofane od wersji JDK 1.1. Sama klasa nadal działa, ale oczekuje się, że nowy kod będzie korzystał Calendar, DateFormatLub java.time klasy opisane są dalej na tej stronie.
Przykład: Wyświetlanie bieżącej daty i godziny w JSP
Przykład:
W tym przykładzie pobieramy bieżącą datę i godzinę za pomocą obiektu 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>
Wyjaśnienie kodu:
Code Linia 11: Używamy obiektu date do pobrania bieżącej daty i godziny.
Współczesny odpowiednik: Powyższy kod jest zachowany dokładnie w takiej formie, w jakiej został opublikowany. toLocaleString() został zastąpiony przez DateFormat.format(Date date) od wersji JDK 1.1, więc bieżąca strona zapisałaby <%= java.text.DateFormat.getDateTimeInstance().format(new java.util.Date()) %> zamiast. The <%= %> Sam znacznik wyrażenia pozostaje niezmieniony.
Po wykonaniu powyższego kodu otrzymasz następujący wynik.
Wyjście:
Pobieramy aktualną datę i godzinę.
Jak formatować datę i godzinę w JSP
Drukowanie Date Obiekt bezpośrednio przekazuje to, co generuje domyślna lokalizacja, co rzadko jest formatem wymaganym przez stronę. Dwa podejścia kontrolują dane wyjściowe.
Pierwszy zachowuje logikę Java i wykorzystuje SimpleDateFormat, gdzie każda litera wzoru reprezentuje jedną część wartości.
<%@ 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 %>
| Wzór listu | Znaczenie | Przykład |
|---|---|---|
yyyy |
Rok czterocyfrowy | 2026 |
MM |
Numer miesiąca | 07 |
dd |
Dzień miesiąca | 29 |
HH |
Godzina, zegar 24-godzinny | 18 |
mm |
minut | 45 |
ss |
Sekund | 02 |
Drugie podejście pozwala zachować stronę wolną od Java kod i zamiast tego używa biblioteki formatowania JSTL, która dobrze komponuje się z innymi Tagi akcji 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" />
uri Wartość pokazana powyżej to format JSTL 3.0 używany przez Jakarta EE 10 i nowsze. Strony działające w starszym kontenerze nadal korzystają z http://java.sun.com/jsp/jstl/fmt, a kontenery nadal akceptują starszy URI w celu zapewnienia zgodności. type atrybut wybiera date, timelub both, podczas dateStyle, timeStyle oraz timeZone doprecyzować wynik.
Obsługa dat za pomocą interfejsu API java.time w JSP
Java 8 wprowadził java.time pakiet i jest to obecnie zalecany sposób pracy z datami w dowolnym Java kod, w tym strona JSP. W przeciwieństwie do DateKlasy te są niezmienne i bezpieczne wątkowo, więc jeden formater może być bezpiecznie współdzielony między żądaniami.
<%@ 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) %>
Wybierz klasę odpowiadającą rzeczywistym potrzebom strony:
LocalDate— data bez określenia godziny, np. data urodzenia.LocalTime— czas bez daty, np. godzina otwarcia.LocalDateTime— data i godzina bez przypisanej strefy czasowej.ZonedDateTime— na przykład data i godzina przypisana do strefyZoneId.of("Asia/Kolkata").Instant— znacznik czasu maszyny, najbliższy odpowiednik tego, cogetTime()zwraca.
Istniejącego kodu nie trzeba przepisywać od razu, ponieważ Date.from(instant) oraz date.toInstant() konwertować między dwoma interfejsami API.
Typowe błędy obsługi dat w JSP
Data, która drukuje się poprawnie na komputerze deweloperskim, może nadal być błędna w środowisku produkcyjnym. Poniższe błędy odpowiadają za większość tych raportów.
- Brak importu: za pomocą
Datebez<%@ page import="java.util.*" %>nie skompiluje się, chyba że w pełni kwalifikowanyjava.util.Datejest wypisane, tak jak w przykładzie na tej stronie. - Błędny wzór liter:
mmto minuty iMMto miesiące iDDjest dniem roku, a nie dniem miesiąca. - Strefa czasowa serwera:
new Date()odzwierciedla zegar serwera, a nie odwiedzającego. UstawtimeZonena znaczniku formatowania, gdy odbiorcy są gdzie indziej. - Udostępnianie SimpleDateFormat: Klasa nie jest bezpieczna dla wątków, więc statyczna instancja współdzielona między żądaniami może zwrócić uszkodzone dane wyjściowe. Utwórz jedną dla każdego żądania lub użyj
DateTimeFormatter. - Pusta strona po aktualizacji: kontener na Dżakarcie EE 10 odrzuca stary
javaxPliki JSTL są przechowywane w formacie JSTL, dzięki czemu znacznik formatowania jest renderowany jako tekst dosłowny do momentu umieszczenia artefaktów z Dżakarty. - Formatowanie ciągu znaków: wartość pobrana z parametru żądania jest tekstem i musi zostać przeanalizowana
parse()przed jakąkolwiek metodą daty, która ją zaakceptuje.

