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.

  • 🔘 Fordel: Enhver metode til kerne Java forbliver tilgængelig på en JSP-side uden ekstra konfiguration.
  • ☑️ Konstruktører: Date() returnerer det aktuelle øjeblik, mens Date(long) genopbygger et øjeblik fra millisekunder siden 1970.
  • ✅ Metoder: `after`, `before`, `compareTo`, `equals`, `getTime`, `setTime` og `toString` dækker det meste sammenligningsarbejde.
  • 🧪 Udtrykstag: Et enkelt udtrykstag udskriver date-objektet direkte i den genererede HTML.
  • 🛠️ Formatering: SimpleDateFormat og JSTL formatDate-tagget styrer præcis, hvordan værdien vises.
  • 📊 Moderne API: java.time-klasser som f.eks. LocalDateTime erstatter de ældre Date-metoder, der er markeret som forældede.

JSP aktuel dato og tid

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.

Browseroutput fra JSP-siden, der udskriver den aktuelle dato og det aktuelle klokkeslæt

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 eksempel ZoneId.of("Asia/Kolkata").
  • Instant — et maskintidsstempel, det tætteste match til hvad getTime() 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 Date uden <%@ page import="java.util.*" %> kan ikke kompileres, medmindre den fuldt kvalificerede java.util.Date er skrevet ud, som eksemplet på denne side gør.
  • Forkerte mønsterbogstaver: mm er minutter og MM er måneder, og DD er en dag i året snarere end en dag i måneden.
  • Serverens tidszone: new Date() afspejler serverens ur, ikke den besøgendes. Indstil timeZone på 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 javax JSTL 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.

Ofte Stillede Spørgsmål

java.util, tilføje <%@ page import="java.util.*" %> øverst på siden, eller skriv den fuldt kvalificerede java.util.Date inde i udtrykstagget, hvilket er hvad eksemplet på denne side gør.

AI-assistenter kan oversætte et formatmønster til almindeligt engelsk, konvertere et ældre Date uddrag ind i java.time, og påpeg et trådsikkerhedsproblem i en delt formateringsenhed. Test forslaget, da et forkert mønsterbogstav stadig kompileres pænt.

Ja. GitHub Copilot fuldfører scriptlets og taglib-direktiver fra en kommentar. Tjek JSTL uri den producerer, da den ofte som standard bruger den ældre java.sun.com værdi snarere end Jakarta-værdien.

new Date() læser uret og standardzonen på den server, der kører siden. Send en eksplicit zone til formateringsprogrammet, eller konverter på klienten, hvis den besøgendes lokale tid er det vigtigste.

getTime() returnerer en long: millisekunderne der er forløbet siden 1. januar 1970. toString() returnerer en læsbar streng bygget ud fra standardlokaliteten. Gem tallet, vis strengen.

Nej. Klassen understøttes fortsat, men de fleste af dens felttilgange har haft en advarsel om udfasning siden JDK 1.1. Ny kode forventes at bruge java.timeog Date.from() forbinder de to API'er.

Ja. Deklarer objektet med <jsp:useBean> og render det med JSTL <fmt:formatDate> tag. Der kræves ingen scriptlet, hvilket holder markup'en læsbar og nemmere at vedligeholde.

Udtryksmærket <%= %>Uanset hvad den indeholder, evalueres den, og dens toString() Resultatet skrives ind i svaret, hvilket er sådan, eksempelsiden udskriver datoen på en enkelt linje.

Opsummer dette indlæg med: