JSP aktuel dato og tid
⚡ Smart opsummering
JSP-datahåndtering er afhængig af almindelig kerne Java, så java.util.Date-klassen og dens konstruktører kan kaldes direkte fra et scriptlet eller et udtrykstag for at udskrive den aktuelle dato og det aktuelle klokkeslæt på en side.

JSP-datohåndtering
Den største fordel ved JSP er, at alle kernemetoder Java kan bruges i JSP.
I dette afsnit vil vi bruge Date klasse af java.util pakke, som indeholder både en dato og et klokkeslæt i et enkelt objekt. Klassen er tilgængelig på alle JSP side, så snart pakken er importeret med en sidedirektiv.
Det understøtter to konstruktører:
| Constructor | Hvad gør den |
|---|---|
Date() |
Den giver os den aktuelle dato og tid. |
Date(long millisec) |
Dette tager en parameter på millisekunder, som er forløbet siden 1. januar 1970. |
Date Klassen eksponerer også metoderne nedenfor. Java Primitive returtyper skrives med små bogstaver, hvilket er sådan de vises i Java API.
| Metode | Beskrivelse |
|---|---|
boolean after(Date date) |
Den angiver, om denne dato falder efter den givne datoparameter. |
boolean before(Date date) |
Den angiver, om denne dato falder før den givne datoparameter. |
Object clone() |
Den opretter en kopi af date-objektet. |
int compareTo(Date date) |
Den sammenligner dateklasseobjektet med et andet. |
int compareTo(Object date) |
Den sammenligner objektklassen objekt med et andet. Denne overbelastning tilhører den prægeneriske API; nuværende Java eksponerer kun compareTo(Date). |
boolean equals(Object date) |
Den kontrollerer, om to datoobjekter er ens. |
long getTime() |
Den henter tiden som millisekunder siden 1. januar 1970. |
int hashCode() |
Den henter hashkoden for den givne dato. |
void setTime(long time) |
Den angiver tidspunktet for det givne datoobjekt. |
String toString() |
Den konverterer date-objektet til et string-objekt. |
Bemærk: felttilgange i denne klasse, såsom getYear(), getMonth() og toLocaleString(), er blevet udfaset siden JDK 1.1. Selve klassen fungerer stadig, men ny kode forventes at bruge Calendar, DateFormatEller java.time klasser beskrevet længere nede på denne side.
Eksempel: Visning af den aktuelle dato og det aktuelle klokkeslæt i JSP
Eksempel:
I dette eksempel henter vi den aktuelle dato og det aktuelle klokkeslæt ved hjælp af date-objektet.
<%@ 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>
Forklaring af koden:
Code Linje 11: Vi bruger datoobjekt til at hente den aktuelle dato og klokkeslæt.
Moderne ækvivalent: Ovenstående kode bevares nøjagtigt som offentliggjort. toLocaleString() blev erstattet af DateFormat.format(Date date) fra JDK 1.1, så en aktuel side ville skrive <%= java.text.DateFormat.getDateTimeInstance().format(new java.util.Date()) %> i stedet. Det <%= %> Selve udtrykstagget er uændret.
Når du udfører ovenstående kode, får du følgende output.
Output:
Vi får den aktuelle dato og tid.
Sådan formaterer du dato og klokkeslæt i JSP
Udskrivning af en Date objektet giver direkte det, som standardlokaliteten producerer, hvilket sjældent er det format, en side har brug for. To tilgange styrer outputtet.
Den første holder logikken inde Java og anvendelser SimpleDateFormat, hvor hvert bogstav i mønsteret står for en del af værdien.
<%@ 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 %>
| Mønsterbogstav | Betydning | Eksempel |
|---|---|---|
yyyy |
Firecifret årstal | 2026 |
MM |
Månedsnummer | 07 |
dd |
Dag i måneden | 29 |
HH |
Time, 24-timers ur | 18 |
mm |
minutter | 45 |
ss |
Sekunder | 02 |
Den anden fremgangsmåde holder siden fri for Java kode og bruger i stedet JSTL-formateringsbiblioteket, hvilket passer godt sammen med de andre JSP-handlingstags.
<%@ 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 Værdien vist ovenfor er JSTL 3.0-formularen, der bruges af Jakarta EE 10 og nyere. Sider, der kører på en ældre container, bruger stadig http://java.sun.com/jsp/jstl/fmt, og containere fortsætter med at acceptere den ældre URI for kompatibilitet. type attributvalg date, time eller both, mens dateStyle, timeStyle og timeZone forfine resultatet.
Håndtering af datoer med java.time API'en i JSP
Java 8 introducerede java.time pakke, og det er nu den anbefalede måde at arbejde med datoer på i enhver Java kode, inklusive en JSP-side. I modsætning til Date, disse klasser er uforanderlige og trådsikre, så en enkelt formateringsprogram kan deles sikkert på tværs af anmodninger.
<%@ 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ælg den klasse, der matcher det, siden rent faktisk har brug for:
LocalDate— en dato uden tidspunkt, såsom en fødselsdato.LocalTime— et tidspunkt uden dato, såsom en åbningstid.LocalDateTime— en dato og et klokkeslæt uden tilknyttet tidszone.ZonedDateTime— en dato og et klokkeslæt, der er knyttet til en zone, for eksempelZoneId.of("Asia/Kolkata").Instant— et maskintidsstempel, det tætteste match til hvadgetTime()vender tilbage.
Eksisterende kode behøver ikke at blive omskrevet på én gang, fordi Date.from(instant) og date.toInstant() konvertere mellem de to API'er.
Almindelige datohåndteringsfejl i JSP
En dato, der udskrives korrekt på en fremkaldermaskine, kan stadig være forkert i produktionen. Fejlene nedenfor forklarer de fleste af disse rapporter.
- Manglende import: ved brug af
Dateuden<%@ page import="java.util.*" %>kan ikke kompileres, medmindre den fuldt kvalificeredejava.util.Dateer skrevet ud, som eksemplet på denne side gør. - Forkerte mønsterbogstaver:
mmer minutter ogMMer måneder, ogDDer en dag i året snarere end en dag i måneden. - Serverens tidszone:
new Date()afspejler serverens ur, ikke den besøgendes. IndstiltimeZonepå formateringstagget, når målgruppen er et andet sted. - Deling af et SimpleDateFormat: Klassen er ikke trådsikker, så en statisk instans, der deles på tværs af anmodninger, kan returnere ødelagt output. Opret én pr. anmodning, eller brug
DateTimeFormatter. - Tom side efter en opgradering: en container på Jakarta EE 10 afviser den gamle
javaxJSTL JAR-filer, så formateringstagget gengives som bogstavelig tekst, indtil Jakarta-artefakterne er på plads. - Formatering af en streng: En værdi, der hentes fra en anmodningsparameter, er tekst og skal parses med
parse()før nogen datometode accepterer det.

