JSP التاريخ والوقت الحاليين

⚡ ملخص ذكي

تعتمد معالجة التاريخ في JSP على النواة العادية Javaلذلك يمكن استدعاء فئة java.util.Date ومنشئاتها مباشرة من برنامج نصي أو علامة تعبير لطباعة التاريخ والوقت الحاليين على الصفحة.

  • 🔘 ميزة: كل طريقة أساسية Java يظل متاحًا داخل صفحة JSP بدون أي إعدادات إضافية.
  • ☑️ منشئو: تقوم الدالة Date() بإرجاع اللحظة الحالية، بينما تقوم الدالة Date(long) بإعادة بناء لحظة من أجزاء من الثانية منذ عام 1970.
  • ✅ الأساليب: تغطي الدوال after و before و compareTo و equals و getTime و setTime و toString معظم عمليات المقارنة.
  • 🧪 علامة التعبير: تقوم علامة التعبير الواحدة بطباعة كائن التاريخ مباشرة في HTML المُنشأ.
  • 🛠️ تنسيق: يتحكم كل من SimpleDateFormat وعلامة JSTL formatDate في كيفية ظهور القيمة بالضبط.
  • 📊 واجهة برمجة التطبيقات الحديثة: تستبدل فئات java.time مثل LocalDateTime طرق التاريخ القديمة التي تم وضع علامة عليها بأنها مهملة.

JSP التاريخ والوقت الحاليين

معالجة تاريخ 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 التي تطبع التاريخ والوقت الحاليين

الإخراج:

نحصل على التاريخ والوقت الحاليين.

كيفية تنسيق التاريخ والوقت في 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() قبل أن تقبله أي طريقة من طرق معالجة التاريخ.

الأسئلة الشائعة

java.util. إضافة <%@ page import="java.util.*" %> في أعلى الصفحة، أو اكتب المؤهل بالكامل java.util.Date داخل علامة التعبير، وهو ما يفعله المثال الموجود في هذه الصفحة.

يمكن للمساعدين الذين يعملون بالذكاء الاصطناعي ترجمة نمط التنسيق إلى لغة إنجليزية بسيطة، وتحويل تنسيق قديم Date مقتطف في java.timeوأشر إلى مشكلة تتعلق بسلامة الخيوط في مُنسِّق مشترك. اختبر الاقتراح، لأن حرف النمط الخاطئ لا يزال يُترجم بشكل صحيح.

نعم. مساعد الطيار جيثب يُكمل هذا الأمر التعليمات البرمجية وتوجيهات مكتبة العلامات من تعليق. راجع JSTL uri ينتج ذلك، لأنه غالباً ما يعود إلى الإصدار الأقدم java.sun.com القيمة الحقيقية وليست قيمة جاكرتا.

new Date() يقرأ هذا الأمر الساعة والمنطقة الزمنية الافتراضية للخادم الذي يُشغّل الصفحة. مرّر منطقة زمنية محددة إلى المُنسِّق، أو قم بالتحويل على جانب العميل، إذا كان التوقيت المحلي للزائر هو المهم.

getTime() إرجاع long: عدد المللي ثواني التي انقضت منذ 1 يناير 1970. toString() تُعيد هذه الدالة سلسلة نصية قابلة للقراءة مُنشأة من اللغة الافتراضية. يتم تخزين الرقم، ثم عرض السلسلة النصية.

لا. لا يزال هذا الصنف مدعومًا، ولكن معظم دوال الوصول إلى حقوله تحمل تحذيرًا بشأن الإهمال منذ إصدار JDK 1.1. من المتوقع أن يستخدم الكود الجديد java.timeو Date.from() يربط بين واجهتي برمجة التطبيقات (APIs).

نعم. قم بتعريف الكائن باستخدام <jsp:useBean> ثم قم بعرضه باستخدام JSTL <fmt:formatDate> الوسم. لا حاجة إلى سكربت، مما يحافظ على وضوح الترميز وسهولة صيانته.

علامة التعبير <%= %>يتم تقييم كل ما يحتويه و... toString() يتم كتابة النتيجة في الاستجابة، وهي الطريقة التي تطبع بها صفحة العينة التاريخ على سطر واحد.

تلخيص هذه التدوينة بـ: