JSP huidige datum en tijd
โก Slimme samenvatting
De datumverwerking in JSP is gebaseerd op de standaard core. JavaDe klasse java.util.Date en de bijbehorende constructors kunnen dus rechtstreeks vanuit een scriptlet of een expressietag worden aangeroepen om de huidige datum en tijd op een pagina weer te geven.
JSP-datumafhandeling
Het grootste voordeel van JSP is dat alle methoden van de kern Java Kan in JSP worden gebruikt.
In dit gedeelte zullen we gebruikmaken van de Date klasse van de java.util pakket, dat zowel een datum als een tijd in รฉรฉn object bevat. De klasse is beschikbaar op elke JSP De pagina verschijnt zodra het pakket is geรฏmporteerd met een paginarichtlijn.
Het ondersteunt twee constructors:
| Constructeur | Wat het doet |
|---|---|
Date() |
Het geeft ons de huidige datum en tijd. |
Date(long millisec) |
Deze functie gebruikt een parameter die het aantal milliseconden aangeeft dat is verstreken sinds 1 januari 1970. |
De Date De klasse biedt ook de onderstaande methoden aan. Java Primitieve retourtypen worden in kleine letters geschreven, zoals ze ook in de code verschijnen. Java API.
| Methode | Beschrijving |
|---|---|
boolean after(Date date) |
Het geeft aan of deze datum na de opgegeven datumparameter valt. |
boolean before(Date date) |
Het geeft aan of deze datum vรณรณr de opgegeven datumparameter valt. |
Object clone() |
Het maakt een kopie van het datumobject. |
int compareTo(Date date) |
Het vergelijkt het datumobject met een ander object. |
int compareTo(Object date) |
Het vergelijkt een object van een bepaalde klasse met een ander object. Deze overbelasting behoort tot de API van vรณรณr de generieke versies; de huidige Java onthult alleen compareTo(Date). |
boolean equals(Object date) |
Het controleert of twee datumobjecten gelijk zijn. |
long getTime() |
Het geeft de tijd weer in milliseconden sinds 1 januari 1970. |
int hashCode() |
Het haalt de hashcode van de opgegeven datum op. |
void setTime(long time) |
Hiermee wordt de tijd van het betreffende datumobject ingesteld. |
String toString() |
Het converteert het datumobject naar een tekenreeksobject. |
Let op: de veldtoegangsmethoden van deze klasse, zoals getYear(), getMonth() en toLocaleString()zijn sinds JDK 1.1 verouderd. De klasse zelf werkt nog steeds, maar van nieuwe code wordt verwacht dat deze gebruikmaakt van . Calendar, DateFormatOf de java.time De klassen worden verderop op deze pagina beschreven.
Voorbeeld: De huidige datum en tijd weergeven in een JSP-bestand
Voorbeeld:
In dit voorbeeld halen we de huidige datum en tijd op met behulp van een datumobject.
<%@ 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>
Uitleg van de code:
Code Regel 11: We gebruiken het date-object om de huidige datum en tijd op te halen.
Modern equivalent: De bovenstaande code is exact overgenomen zoals gepubliceerd. toLocaleString() werd vervangen door DateFormat.format(Date date) vanaf JDK 1.1, dus een huidige pagina zou schrijven <%= java.text.DateFormat.getDateTimeInstance().format(new java.util.Date()) %> in plaats daarvan. De <%= %> De expressietag zelf blijft ongewijzigd.
Wanneer u de bovenstaande code uitvoert, krijgt u de volgende uitvoer.
Output:
We krijgen de huidige datum en tijd te zien.
Hoe formatteer je datum en tijd in JSP?
Afdrukken van een Date Het object geeft direct de opmaak weer die de standaardlocale produceert, wat zelden de opmaak is die een pagina nodig heeft. Er zijn twee benaderingen om de uitvoer te bepalen.
De eerste behoudt de logica. Java en gebruikt SimpleDateFormatwaarbij elke letter van het patroon staat voor een deel van de waarde.
<%@ 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 %>
| Patroonletter | Betekenis | Voorbeeld |
|---|---|---|
yyyy |
Jaartal van vier cijfers | 2026 |
MM |
Maandnummer | 07 |
dd |
Dag van de maand | 29 |
HH |
Uur, 24-uursklok | 18 |
mm |
minuten | 45 |
ss |
seconden | 02 |
De tweede aanpak zorgt ervoor dat de pagina vrij blijft van Java code en gebruikt in plaats daarvan de JSTL-opmaakbibliotheek, die goed samengaat met de andere JSP-actietags.
<%@ 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" />
De uri De hierboven weergegeven waarde is de JSTL 3.0-vorm die wordt gebruikt door Jakarta EE 10 en latere versies. Pagina's die op een oudere container draaien, gebruiken nog steeds de andere vorm. http://java.sun.com/jsp/jstl/fmtEn containers blijven de oudere URI accepteren voor compatibiliteit. type attribuutselecties date, timeof both en dateStyle, timeStyle en timeZone Verfijn het resultaat.
Datums verwerken met de java.time API in JSP
Java 8 introduceerde de java.time pakket, en het is nu de aanbevolen manier om met datums te werken in elk pakket. Java code, inclusief een JSP-pagina. In tegenstelling tot DateDeze klassen zijn onveranderlijk en thread-safe, waardoor รฉรฉn enkele formatter veilig gedeeld kan worden tussen verschillende verzoeken.
<%@ 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) %>
Kies de klasse die het beste aansluit bij de behoeften van de pagina:
LocalDateโ een datum zonder tijdstip, zoals een geboortedatum.LocalTimeโ een tijdstip zonder datum, zoals een openingstijd.LocalDateTimeโ een datum en tijd zonder tijdzone.ZonedDateTimeโ een datum en tijd die bijvoorbeeld aan een tijdzone zijn gekoppeldZoneId.of("Asia/Kolkata").Instantโ een machinetijdstempel, de beste overeenkomst met watgetTime()komt terug.
Bestaande code hoeft niet in รฉรฉn keer herschreven te worden, omdat Date.from(instant) en date.toInstant() Converteer tussen de twee API's.
Veelvoorkomende fouten bij het verwerken van datums in JSP
Een datum die correct wordt afgedrukt op een ontwikkelmachine, kan in de productieomgeving alsnog onjuist zijn. De onderstaande fouten zijn verantwoordelijk voor de meeste van deze meldingen.
- Ontbrekende import: gebruik
Datezonder<%@ page import="java.util.*" %>Het compileren mislukt tenzij de volledig gekwalificeerdejava.util.Datewordt volledig uitgeschreven, zoals in het voorbeeld op deze pagina. - Onjuiste patroonletters:
mmis minuten enMMis maanden, enDDHet gaat om de dag van het jaar, niet om de dag van de maand. - Servertijdzone:
new Date()Geeft de klok van de server weer, niet die van de bezoeker. InstellentimeZoneop de opmaaktag wanneer het publiek zich elders bevindt. - Een SimpleDateFormat delen: De klasse is niet thread-safe, dus een statische instantie die gedeeld wordt over meerdere verzoeken kan corrupte uitvoer retourneren. Maak er รฉรฉn per verzoek aan, of gebruik
DateTimeFormatter. - Lege pagina na een upgrade: Een container op Jakarta EE 10 weigert het oude product.
javaxJSTL-jars, waardoor de opmaaktag als letterlijke tekst wordt weergegeven totdat de Jakarta-artefacten op hun plaats zijn. - Een tekenreeks formatteren: Een waarde die uit een verzoekparameter wordt gehaald, is tekst en moet worden geparseerd met
parse()Voordat een bepaalde datum wordt geaccepteerd, zal de methode deze accepteren.

