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.

  • ๐Ÿ”˜ Voordeel: Elke methode van kern Java blijft beschikbaar binnen een JSP-pagina zonder extra configuratie.
  • โ˜‘๏ธ Constructeurs: Date() geeft het huidige moment terug, terwijl Date(long) een moment reconstrueert op basis van milliseconden sinds 1970.
  • โœ… Methoden: De functies after, before, compareTo, equals, getTime, setTime en toString dekken het meeste vergelijkingswerk.
  • ๐Ÿงช Expressietag: Een enkele expressietag print het datumobject direct in de gegenereerde HTML.
  • ๏ธ Formatteren: SimpleDateFormat en de JSTL-tag formatDate bepalen precies hoe de waarde wordt weergegeven.
  • ๐Ÿ“Š Moderne API: Java.Time-klassen zoals LocalDateTime vervangen de oudere Date-methoden die als verouderd zijn gemarkeerd.

JSP huidige datum en tijd

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.

Browseruitvoer van de JSP-pagina die de huidige datum en tijd weergeeft.

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 gekoppeld ZoneId.of("Asia/Kolkata").
  • Instant โ€” een machinetijdstempel, de beste overeenkomst met wat getTime() 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 Date zonder <%@ page import="java.util.*" %> Het compileren mislukt tenzij de volledig gekwalificeerde java.util.Date wordt volledig uitgeschreven, zoals in het voorbeeld op deze pagina.
  • Onjuiste patroonletters: mm is minuten en MM is maanden, en DD Het 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. Instellen timeZone op 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. javax JSTL-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.

Veelgestelde vragen

java.util. Toevoegen <%@ page import="java.util.*" %> bovenaan de pagina, of schrijf de volledig gekwalificeerde naam. java.util.Date binnen de expressietag, zoals in het voorbeeld op deze pagina te zien is.

AI-assistenten kunnen een opmaakpatroon vertalen naar begrijpelijke taal, een ouder bestand converteren, enzovoort. Date fragment in java.timeEn wijs op een probleem met de threadveiligheid in een gedeelde formatter. Test de suggestie, want een verkeerde patroonletter compileert nog steeds zonder problemen.

Ja. GitHub-copiloot Vult scriptlets en taglib-richtlijnen aan op basis van een commentaar. Controleer de JSTL. uri het produceert, omdat het vaak terugvalt op de oudere versie. java.sun.com waarde in plaats van die in Jakarta.

new Date() Leest de klok en de standaard tijdzone van de server waarop de pagina draait. Geef een expliciete tijdzone door aan de formatter, of converteer aan de clientzijde, als de lokale tijd van de bezoeker van belang is.

getTime() geeft een terug long: het aantal milliseconden dat is verstreken sinds 1 januari 1970. toString() Retourneert een leesbare tekenreeks, opgebouwd uit de standaardlocale. Sla het getal op en toon de tekenreeks.

Nee. De klasse wordt nog steeds ondersteund, maar de meeste methoden om velden te benaderen bevatten sinds JDK 1.1 een waarschuwing dat ze verouderd zijn. Nieuwe code zal naar verwachting gebruikmaken van... java.timeen Date.from() vormt de brug tussen de twee API's.

Ja. Declareer het object met <jsp:useBean> en het renderen met de JSTL <fmt:formatDate> tag. Er is geen scriptlet nodig, waardoor de markup leesbaar en gemakkelijker te onderhouden blijft.

De expressie-tag <%= %>Alles wat het bevat, wordt geรซvalueerd en de inhoud ervan wordt beoordeeld. toString() Het resultaat wordt in het antwoord geschreven, vandaar dat de datum op de voorbeeldpagina op รฉรฉn regel wordt afgedrukt.

Vat dit bericht samen met: