JSP التاريخ والوقت الحاليين
⚡ ملخص ذكي
تعتمد معالجة التاريخ في JSP على النواة العادية Javaلذلك يمكن استدعاء فئة java.util.Date ومنشئاتها مباشرة من برنامج نصي أو علامة تعبير لطباعة التاريخ والوقت الحاليين على الصفحة.
معالجة تاريخ JSP
أكبر ميزة لـ JSP هي أن جميع طرق النواة Java يمكن استخدامها في JSP.
في هذا القسم، سنستخدم Date فئة من java.util حزمة تحتوي على كل من التاريخ والوقت في كائن واحد. هذه الفئة متاحة في كل JSP يتم إنشاء الصفحة بمجرد استيراد الحزمة باستخدام توجيه الصفحة.
وهو يدعم اثنين من المنشئين:
| منشئ | ماذا يفعل |
|---|---|
Date() |
فهو يعطينا التاريخ والوقت الحاليين. |
Date(long millisec) |
يأخذ هذا معيارًا بالمللي ثانية انقضى منذ 1 يناير 1970. |
استخدم Date كما يعرض هذا الصنف الطرق المذكورة أدناه. Java تُكتب أنواع الإرجاع الأولية بأحرف صغيرة، وهذا هو شكلها في Java API.
| الأسلوب | الوصف |
|---|---|
boolean after(Date date) |
يحدد ما إذا كان هذا التاريخ يقع بعد تاريخ المعامل المحدد. |
boolean before(Date date) |
يحدد ما إذا كان هذا التاريخ يقع قبل تاريخ المعلمة المحددة. |
Object clone() |
يقوم بإنشاء نسخة من كائن التاريخ. |
int compareTo(Date date) |
يقارن هذا الأمر كائن فئة التاريخ بكائن آخر. |
int compareTo(Object date) |
يقارن هذا الكود كائنًا من فئة كائنات أخرى. ينتمي هذا النوع من التحميل الزائد إلى واجهة برمجة التطبيقات قبل دعم الأنواع العامة؛ حاليًا Java لا يكشف إلا compareTo(Date). |
boolean equals(Object date) |
يتحقق من تساوي كائنين من نوع التاريخ. |
long getTime() |
يستخرج الوقت بالمللي ثانية منذ 1 يناير 1970. |
int hashCode() |
يقوم بجلب رمز التجزئة للتاريخ المحدد. |
void setTime(long time) |
يحدد وقت كائن التاريخ المحدد. |
String toString() |
يقوم بتحويل كائن التاريخ إلى كائن سلسلة نصية. |
ملاحظة: أدوات الوصول إلى الحقول في هذه الفئة، مثل getYear(), getMonth() و toLocaleString()تم إيقاف استخدام هذه الميزة منذ إصدار JDK 1.1. لا يزال الصنف نفسه يعمل، ولكن من المتوقع أن يستخدم الكود الجديد هذه الميزة. Calendar, DateFormat، أو java.time الفئات الموضحة في أسفل هذه الصفحة.
مثال: عرض التاريخ والوقت الحاليين في JSP
على سبيل المثال:
في هذا المثال، نقوم بجلب التاريخ والوقت الحاليين باستخدام كائن التاريخ.
<%@ 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" />
استخدم uri القيمة الموضحة أعلاه هي صيغة JSTL 3.0 المستخدمة في Jakarta EE 10 والإصدارات الأحدث. الصفحات التي تعمل على حاوية أقدم لا تزال تستخدم http://java.sun.com/jsp/jstl/fmtوتستمر الحاويات في قبول عنوان URI القديم من أجل التوافق. type تحديدات السمة date, time أو both، في حين dateStyle, timeStyle و timeZone قم بتحسين النتيجة.
التعامل مع التواريخ باستخدام واجهة برمجة تطبيقات 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() التحويل بين واجهتي برمجة التطبيقات (APIs).
أخطاء شائعة في التعامل مع التاريخ في JSP
قد يظهر التاريخ بشكل صحيح على جهاز المطور، ولكنه قد يكون خاطئًا في بيئة الإنتاج. وتُعزى معظم هذه التقارير إلى الأخطاء المذكورة أدناه.
- استيراد مفقود: استخدام
Dateبدون<%@ page import="java.util.*" %>يفشل التجميع ما لم يتم استخدام المؤهل بالكاملjava.util.Dateيتم كتابتها، كما هو الحال في المثال الموجود في هذه الصفحة. - حروف بنمط خاطئ:
mmدقائق وMMأشهر، وDDهو يوم من أيام السنة وليس يوم من أيام الشهر. - المنطقة الزمنية للخادم:
new Date()يعكس هذا التوقيت توقيت الخادم، وليس توقيت الزائر. اضبطtimeZoneعلى علامة التنسيق عندما يكون الجمهور في مكان آخر. - مشاركة تنسيق تاريخ بسيط: هذه الفئة غير آمنة للاستخدام في بيئات متعددة الخيوط، لذا فإن النسخة الثابتة المشتركة بين الطلبات قد تُرجع مخرجات تالفة. أنشئ نسخة لكل طلب، أو استخدم
DateTimeFormatter. - صفحة فارغة بعد التحديث: حاوية على طريق جاكرتا EE 10 ترفض القديم
javaxملفات JSTL jars، لذلك يتم عرض علامة التنسيق كنص حرفي حتى يتم تثبيت عناصر Jakarta. - تنسيق سلسلة نصية: القيمة المستخرجة من مُعامل الطلب هي نص ويجب تحليلها باستخدام
parse()قبل أن تقبله أي طريقة من طرق معالجة التاريخ.

