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.

  • 🔘 Korzyść: Każda metoda rdzenia Java pozostaje dostępny na stronie JSP bez konieczności dodatkowej konfiguracji.
  • Konstruktorzy: Date() zwraca aktualny moment, natomiast Date(long) rekonstruuje moment na podstawie milisekund od 1970 roku.
  • metody: after, before, compareTo, equals, getTime, setTime i toString obejmują większość prac porównawczych.
  • 🧪 Znacznik wyrażenia: Pojedynczy znacznik wyrażenia drukuje obiekt daty bezpośrednio w wygenerowanym kodzie HTML.
  • 🛠️. Formatowanie: SimpleDateFormat i znacznik formatDate JSTL dokładnie kontrolują sposób wyświetlania wartości.
  • 📊 Nowoczesne API: Klasy java.time, takie jak LocalDateTime, zastępują starsze metody Date oznaczone jako przestarzałe.

JSP Bieżąca data i godzina

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 przeglądarki ze strony JSP drukującej bieżącą datę i godzinę

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 strefy ZoneId.of("Asia/Kolkata").
  • Instant — znacznik czasu maszyny, najbliższy odpowiednik tego, co getTime() 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ą Date bez <%@ page import="java.util.*" %> nie skompiluje się, chyba że w pełni kwalifikowany java.util.Date jest wypisane, tak jak w przykładzie na tej stronie.
  • Błędny wzór liter: mm to minuty i MM to miesiące i DD jest dniem roku, a nie dniem miesiąca.
  • Strefa czasowa serwera: new Date() odzwierciedla zegar serwera, a nie odwiedzającego. Ustaw timeZone na 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 javax Pliki 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.

FAQ

java.util. Dodaj <%@ page import="java.util.*" %> na górze strony lub wpisz pełne kwalifikowane java.util.Date wewnątrz znacznika wyrażenia, co jest widoczne w przykładzie na tej stronie.

Asystenci AI potrafią przetłumaczyć wzorzec formatu na prosty język angielski, przekonwertować starszy Date fragment do java.timei wskaż problem z bezpieczeństwem wątków we współdzielonym formaterze. Przetestuj sugestię, ponieważ błędna litera wzorca nadal kompiluje się poprawnie.

Tak. Drugi pilot GitHub Uzupełnia skryptlety i dyrektywy taglib z komentarza. Sprawdź JSTL uri produkuje, ponieważ często domyślnie wybiera starszą wersję java.sun.com wartość, a nie ta z Dżakarty.

new Date() Odczytuje zegar i domyślną strefę serwera, na którym uruchomiona jest strona. Przekazuje jawną strefę do formatera lub konwertuje po stronie klienta, jeśli liczy się lokalny czas odwiedzającego.

getTime() zwraca a long:milisekundy, które upłynęły od 1 stycznia 1970 r. toString() Zwraca czytelny ciąg znaków utworzony na podstawie domyślnej lokalizacji. Przechowuje liczbę i wyświetla ciąg znaków.

Nie. Klasa jest nadal obsługiwana, ale większość jej akcesorów do pól jest oznaczona ostrzeżeniem o wycofaniu od wersji JDK 1.1. Oczekuje się, że nowy kod będzie korzystał z java.time, Date.from() łączy dwa interfejsy API.

Tak. Zadeklaruj obiekt za pomocą <jsp:useBean> i renderuj za pomocą JSTL <fmt:formatDate> Tag. Skryptlet nie jest wymagany, co sprawia, że ​​znaczniki są czytelne i łatwiejsze w utrzymaniu.

Znacznik wyrażenia <%= %>. Wszystko, co zawiera, jest oceniane i toString() wynik jest zapisywany w odpowiedzi, w ten sposób strona przykładowa drukuje datę w jednym wierszu.

Podsumuj ten post następująco: