JSP Τρέχουσα ημερομηνία και ώρα

⚡ Έξυπνη Σύνοψη

Η διαχείριση ημερομηνιών JSP βασίζεται σε απλό πυρήνα Java, επομένως η κλάση java.util.Date και οι κατασκευαστές της μπορούν να κληθούν απευθείας από ένα scriptlet ή μια ετικέτα έκφρασης για να εκτυπώσουν την τρέχουσα ημερομηνία και ώρα σε μια σελίδα.

  • 🔘 Πλεονέκτημα: Κάθε μέθοδος πυρήνα Java παραμένει διαθέσιμο μέσα σε μια σελίδα JSP χωρίς επιπλέον ρυθμίσεις.
  • ☑️ Κατασκευαστές: Η συνάρτηση Date() επιστρέφει την τρέχουσα στιγμή, ενώ η συνάρτηση Date(long) ανακατασκευάζει μια στιγμή από χιλιοστά του δευτερολέπτου από το 1970.
  • Μέθοδοι: Οι after, before, compareTo, equals, getTime, setTime και toString καλύπτουν το μεγαλύτερο μέρος της εργασίας σύγκρισης.
  • 🧪 Ετικέτα έκφρασης: Μία ετικέτα έκφρασης εκτυπώνει το αντικείμενο ημερομηνίας απευθείας στον δημιουργημένο κώδικα HTML.
  • Μορφοποίηση: Το SimpleDateFormat και η ετικέτα JSTL formatDate ελέγχουν ακριβώς τον τρόπο εμφάνισης της τιμής.
  • 📊 Σύγχρονο API: Οι κλάσεις java.time όπως η LocalDateTime αντικαθιστούν τις παλαιότερες μεθόδους Date που έχουν επισημανθεί ως παρωχημένες.

JSP Τρέχουσα ημερομηνία και ώρα

Χειρισμός ημερομηνίας JSP

Το μεγαλύτερο πλεονέκτημα του JSP είναι ότι όλες οι μέθοδοι πυρήνα Java μπορεί να χρησιμοποιηθεί σε JSP.

Σε αυτήν την ενότητα, θα χρησιμοποιήσουμε το Date τάξη των java.util πακέτο, το οποίο περιέχει τόσο ημερομηνία όσο και ώρα σε ένα μόνο αντικείμενο. Η κλάση είναι διαθέσιμη σε κάθε JSP σελίδα μόλις εισαχθεί το πακέτο με μια οδηγία σελίδας.

Υποστηρίζει δύο κατασκευαστές:

Κατασκευαστής Τι κάνει
Date() Μας δίνει την τρέχουσα ημερομηνία και ώρα.
Date(long millisec) Αυτό απαιτεί μια παράμετρο χιλιοστών του δευτερολέπτου που έχει παρέλθει από την 1η Ιανουαρίου 1970.

The Date Η κλάση παρουσιάζει επίσης τις μεθόδους που αναφέρονται παρακάτω. Java Οι πρωτόγονοι τύποι επιστροφής γράφονται με πεζά γράμματα, όπως εμφανίζονται και στο Java API.

Μέθοδος Περιγραφή
boolean after(Date date) Υποδεικνύει εάν αυτή η ημερομηνία είναι μεταγενέστερη της δεδομένης παραμέτρου ημερομηνίας.
boolean before(Date date) Υποδεικνύει εάν αυτή η ημερομηνία είναι προγενέστερη της δεδομένης παραμέτρου ημερομηνίας.
Object clone() Δημιουργεί ένα αντίγραφο του αντικειμένου ημερομηνίας.
int compareTo(Date date) Συγκρίνει το αντικείμενο κλάσης ημερομηνίας με ένα άλλο.
int compareTo(Object date) Συγκρίνεται με το αντικείμενο της κλάσης αντικειμένου με ένα άλλο. Αυτή η υπερφόρτωση ανήκει στο API προγενέστερων γενοσήμων. Java εκθέτει μόνο compareTo(Date).
boolean equals(Object date) Ελέγχει εάν δύο αντικείμενα ημερομηνίας είναι ίσα.
long getTime() Λαμβάνει τον χρόνο σε χιλιοστά του δευτερολέπτου από την 1η Ιανουαρίου 1970.
int hashCode() Ανακτά τον κωδικό κατακερματισμού της δεδομένης ημερομηνίας.
void setTime(long time) Ορίζει την ώρα του δεδομένου αντικειμένου ημερομηνίας.
String toString() Μετατρέπει το αντικείμενο date σε αντικείμενο string.

Σημείωση: τα εξαρτήματα πεδίου αυτής της κατηγορίας, όπως getYear(), getMonth() και toLocaleString(), έχουν καταργηθεί από την έκδοση JDK 1.1. Η ίδια η κλάση εξακολουθεί να λειτουργεί, αλλά ο νέος κώδικας αναμένεται να χρησιμοποιεί Calendar, DateFormat, Ή η java.time μαθήματα που περιγράφονται παρακάτω σε αυτήν τη σελίδα.

Παράδειγμα: Εμφάνιση της τρέχουσας ημερομηνίας και ώρας σε JSP

Παράδειγμα:

Σε αυτό το παράδειγμα, ανακτούμε την τρέχουσα ημερομηνία και ώρα χρησιμοποιώντας το αντικείμενο 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>

Επεξήγηση του κώδικα:

Code Γραμμή 11: Χρησιμοποιούμε αντικείμενο ημερομηνίας για να ανακτήσουμε την τρέχουσα ημερομηνία και ώρα.

Σύγχρονο ισοδύναμο: Ο παραπάνω κώδικας διατηρείται ακριβώς όπως δημοσιεύτηκε. toLocaleString() αντικαταστάθηκε από το DateFormat.format(Date date) από το JDK 1.1, άρα μια τρέχουσα σελίδα θα έγραφε <%= java.text.DateFormat.getDateTimeInstance().format(new java.util.Date()) %> αντι αυτου. ο <%= %> Η ίδια η ετικέτα έκφρασης παραμένει αμετάβλητη.

Όταν εκτελείτε τον παραπάνω κώδικα, λαμβάνετε την ακόλουθη έξοδο.

Έξοδος προγράμματος περιήγησης της σελίδας JSP που εκτυπώνει την τρέχουσα ημερομηνία και ώρα

Παραγωγή:

Λαμβάνουμε την τρέχουσα ημερομηνία και ώρα.

Πώς να μορφοποιήσετε την ημερομηνία και την ώρα σε JSP

Εκτύπωση ενός Date Το αντικείμενο δίνει απευθείας ό,τι παράγει η προεπιλεγμένη τοπική ρύθμιση, η οποία σπάνια είναι η μορφή που χρειάζεται μια σελίδα. Δύο προσεγγίσεις ελέγχουν την έξοδο.

Το πρώτο διατηρεί τη λογική μέσα Java και χρήσεις SimpleDateFormat, όπου κάθε γράμμα του μοτίβου αντιπροσωπεύει ένα μέρος της τιμής.

<%@ 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 %>
Μοτίβο γράμματος Νόημα Παράδειγμα
yyyy Τετραψήφιο έτος 2026
MM Αριθμός μήνα 07
dd Ημέρα του μήνα 29
HH Ώρα, 24ωρο ρολόι 18
mm Λεπτ. 45
ss Δευ/τα 02

Η δεύτερη προσέγγιση διατηρεί τη σελίδα απαλλαγμένη από Java κώδικα και χρησιμοποιεί αντ' αυτού τη βιβλιοθήκη μορφοποίησης JSTL, η οποία συνδυάζεται καλά με τις άλλες Ετικέτες ενέργειας 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" />

The uri Η τιμή που εμφανίζεται παραπάνω είναι η φόρμα JSTL 3.0 που χρησιμοποιείται από την Jakarta EE 10 και νεότερες εκδόσεις. Οι σελίδες που εκτελούνται σε παλαιότερο κοντέινερ εξακολουθούν να χρησιμοποιούν http://java.sun.com/jsp/jstl/fmtκαι τα κοντέινερ συνεχίζουν να δέχονται το παλαιότερο URI για συμβατότητα. Το type επιλογές χαρακτηριστικών date, timeΤο HIFU, ή Υψηλής Έντασης Εστιασμένος Υπέρηχος, στοχεύει επίσης στο πρόσωπο και τον λαιμό. Προσφέρει θεραπεία σε γρήγορες εκπομπές, γεγονός που κάνει τις συνεδρίες θεραπείας συντομότερες. both, Ενώ dateStyle, timeStyle και timeZone βελτιώστε το αποτέλεσμα.

Χειρισμός ημερομηνιών με το API java.time σε JSP

Java 8 εισήγαγε το java.time πακέτο, και τώρα είναι ο συνιστώμενος τρόπος εργασίας με ημερομηνίες σε οποιοδήποτε Java κώδικα, συμπεριλαμβανομένης μιας σελίδας JSP. Σε αντίθεση με Date, αυτές οι κλάσεις είναι αμετάβλητες και ασφαλείς για νήματα, επομένως ένας μόνο μορφοποιητής μπορεί να κοινοποιηθεί με ασφάλεια σε όλα τα αιτήματα.

<%@ 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) %>

Επιλέξτε την κλάση που ταιριάζει με αυτό που πραγματικά χρειάζεται η σελίδα:

  • LocalDate — μια ημερομηνία χωρίς ώρα, όπως η ημερομηνία γέννησης.
  • LocalTime — μια ώρα χωρίς ημερομηνία, όπως μια ώρα λειτουργίας.
  • LocalDateTime — ημερομηνία και ώρα χωρίς συνδεδεμένη ζώνη ώρας.
  • ZonedDateTime — μια ημερομηνία και ώρα που συνδέονται με μια ζώνη, για παράδειγμα ZoneId.of("Asia/Kolkata").
  • Instant — μια χρονική σήμανση μηχανής, η πιο κοντινή αντιστοιχία με αυτό που getTime() επιστρέφει.

Ο υπάρχοντας κώδικας δεν χρειάζεται να ξαναγραφεί μονομιάς, επειδή Date.from(instant) και date.toInstant() μετατροπή μεταξύ των δύο API.

Συνήθη σφάλματα χειρισμού ημερομηνιών σε JSP

Μια ημερομηνία που εκτυπώνεται σωστά σε έναν υπολογιστή προγραμματιστή μπορεί να είναι λανθασμένη στην παραγωγή. Τα παρακάτω λάθη ευθύνονται για τις περισσότερες από αυτές τις αναφορές.

  • Λείπει η εισαγωγή: Date without <%@ page import="java.util.*" %> αποτυγχάνει να μεταγλωττιστεί εκτός εάν είναι πλήρως προσδιορισμένος java.util.Date είναι γραμμένο, όπως και το παράδειγμα σε αυτήν τη σελίδα.
  • Λάθος γράμματα μοτίβου: mm είναι λεπτά και MM είναι μήνες, και DD είναι η ημέρα του έτους και όχι η ημέρα του μήνα.
  • Ζώνη ώρας διακομιστή: new Date() αντικατοπτρίζει το ρολόι του διακομιστή, όχι του επισκέπτη. Ορίστε timeZone στην ετικέτα μορφοποίησης όταν το κοινό βρίσκεται αλλού.
  • Κοινή χρήση ενός SimpleDateFormat: Η κλάση δεν είναι ασφαλής για νήματα, επομένως μια στατική παρουσία που μοιράζεται σε όλα τα αιτήματα μπορεί να επιστρέψει κατεστραμμένη έξοδο. Δημιουργήστε μία ανά αίτημα ή χρησιμοποιήστε DateTimeFormatter.
  • Κενή σελίδα μετά από αναβάθμιση: ένα κοντέινερ στην Τζακάρτα EE 10 απορρίπτει το παλιό javax JSTL jars, επομένως η ετικέτα μορφοποίησης αποδίδεται ως κείμενο literal μέχρι να τοποθετηθούν τα artifacts της Τζακάρτα.
  • Μορφοποίηση συμβολοσειράς: Μια τιμή που εξάγεται από μια παράμετρο αιτήματος είναι κείμενο και πρέπει να αναλυθεί με parse() πριν από οποιαδήποτε μέθοδο ημερομηνίας που θα την αποδεχτεί.

Συχνές Ερωτήσεις

java.util. Προσθέστε <%@ page import="java.util.*" %> στο επάνω μέρος της σελίδας ή γράψτε τα πλήρη στοιχεία java.util.Date μέσα στην ετικέτα έκφρασης, κάτι που κάνει το παράδειγμα σε αυτήν τη σελίδα.

Οι βοηθοί τεχνητής νοημοσύνης μπορούν να μεταφράσουν ένα μοτίβο μορφοποίησης σε απλά αγγλικά, να μετατρέψουν ένα παλαιότερο Date απόσπασμα σε java.timeκαι επισημάνετε ένα πρόβλημα ασφάλειας νημάτων σε έναν κοινόχρηστο μορφοποιητή. Ελέγξτε την πρόταση, επειδή ένα λάθος γράμμα μοτίβου εξακολουθεί να μεταγλωττίζεται ομαλά.

Ναί. GitHub Copilot ολοκληρώνει scriptlets και οδηγίες taglib από ένα σχόλιο. Ελέγξτε το JSTL uri παράγει, καθώς συχνά υπολείπεται του παλαιότερου java.sun.com αξία αντί για αυτήν της Τζακάρτα.

new Date() Διαβάζει το ρολόι και την προεπιλεγμένη ζώνη του διακομιστή που εκτελεί τη σελίδα. Μεταβιβάζει μια σαφή ζώνη στον μορφοποιητή ή μετατρέπει στον πελάτη, εάν η τοπική ώρα του επισκέπτη είναι αυτό που έχει σημασία.

getTime() επιστρέφει a long: τα χιλιοστά του δευτερολέπτου που έχουν παρέλθει από την 1η Ιανουαρίου 1970. toString() Επιστρέφει μια αναγνώσιμη συμβολοσειρά που έχει δημιουργηθεί από τις προεπιλεγμένες τοπικές ρυθμίσεις. Αποθηκεύστε τον αριθμό, εμφανίστε τη συμβολοσειρά.

Όχι. Η κλάση εξακολουθεί να υποστηρίζεται, αλλά τα περισσότερα από τα πεδία πρόσβασης έχουν λάβει προειδοποίηση κατάργησης από την έκδοση JDK 1.1. Ο νέος κώδικας αναμένεται να χρησιμοποιεί java.timeκαι Date.from() γεφυρώνει τα δύο API.

Ναι. Δηλώστε το αντικείμενο με <jsp:useBean> και να το αποδώσετε με το JSTL <fmt:formatDate> ετικέτα. Δεν απαιτείται scriptlet, γεγονός που διατηρεί την σήμανση ευανάγνωστη και ευκολότερη στη συντήρηση.

Η ετικέτα έκφρασης <%= %>Ό,τι περιέχει αξιολογείται και toString() Το αποτέλεσμα εγγράφεται στην απάντηση, και έτσι η σελίδα-δείγμα εκτυπώνει την ημερομηνία σε μία μόνο γραμμή.

Συνοψίστε αυτήν την ανάρτηση με: