JSP Τρέχουσα ημερομηνία και ώρα
⚡ Έξυπνη Σύνοψη
Η διαχείριση ημερομηνιών JSP βασίζεται σε απλό πυρήνα Java, επομένως η κλάση java.util.Date και οι κατασκευαστές της μπορούν να κληθούν απευθείας από ένα scriptlet ή μια ετικέτα έκφρασης για να εκτυπώσουν την τρέχουσα ημερομηνία και ώρα σε μια σελίδα.
Χειρισμός ημερομηνίας 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
Εκτύπωση ενός 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
Μια ημερομηνία που εκτυπώνεται σωστά σε έναν υπολογιστή προγραμματιστή μπορεί να είναι λανθασμένη στην παραγωγή. Τα παρακάτω λάθη ευθύνονται για τις περισσότερες από αυτές τις αναφορές.
- Λείπει η εισαγωγή:
Datewithout<%@ page import="java.util.*" %>αποτυγχάνει να μεταγλωττιστεί εκτός εάν είναι πλήρως προσδιορισμένοςjava.util.Dateείναι γραμμένο, όπως και το παράδειγμα σε αυτήν τη σελίδα. - Λάθος γράμματα μοτίβου:
mmείναι λεπτά καιMMείναι μήνες, καιDDείναι η ημέρα του έτους και όχι η ημέρα του μήνα. - Ζώνη ώρας διακομιστή:
new Date()αντικατοπτρίζει το ρολόι του διακομιστή, όχι του επισκέπτη. ΟρίστεtimeZoneστην ετικέτα μορφοποίησης όταν το κοινό βρίσκεται αλλού. - Κοινή χρήση ενός SimpleDateFormat: Η κλάση δεν είναι ασφαλής για νήματα, επομένως μια στατική παρουσία που μοιράζεται σε όλα τα αιτήματα μπορεί να επιστρέψει κατεστραμμένη έξοδο. Δημιουργήστε μία ανά αίτημα ή χρησιμοποιήστε
DateTimeFormatter. - Κενή σελίδα μετά από αναβάθμιση: ένα κοντέινερ στην Τζακάρτα EE 10 απορρίπτει το παλιό
javaxJSTL jars, επομένως η ετικέτα μορφοποίησης αποδίδεται ως κείμενο literal μέχρι να τοποθετηθούν τα artifacts της Τζακάρτα. - Μορφοποίηση συμβολοσειράς: Μια τιμή που εξάγεται από μια παράμετρο αιτήματος είναι κείμενο και πρέπει να αναλυθεί με
parse()πριν από οποιαδήποτε μέθοδο ημερομηνίας που θα την αποδεχτεί.

