كيفية تخزين وحساب ومقارنة بيانات التاريخ/الوقت في Microsoft Access

للحصول على إصدار Microsoft Access 97 من هذه المقالة، راجع
130514.

متوسطة: يتطلب ماكرو الأساسية ترميز والمهارات إمكانية التشغيل المتداخل.

ملخص

توضح هذه المقالة كيفية كتابة Microsoft Access مخازن بيانات التاريخ/الوقت. توضح هذه المقالة سبب ظهور نتائج غير متوقعة عند حساب التواريخ والأوقات أو مقارنة التواريخ والأوقات أيضا.

توضح هذه المقالة الموضوعات التالية:

  • تخزين بيانات التاريخ/الوقت

  • تنسيق حقل تاريخ/وقت

  • حساب البيانات الوقت

  • مقارنة بيانات التاريخ

  • مقارنة البيانات الوقت

مزيد من المعلومات

تخزين بيانات التاريخ/الوقت

عدد مخازن access نوع بيانات التاريخ/الوقت دقة مزدوجة، الفاصلة عائمة 15 المنازل العشرية. الجزء الصحيح من رقم الدقة المزدوجة يمثل التاريخ. الجزء العشري يمثل الوقت.

تاريخ صحيح نطاق قيم من-657434 (كانون الثاني/يناير 1، 100 م) إلى 2,958,465 (كانون الأول/ديسمبر 31، 9999 بعد الميلاد). تمثل قيمة 0 تاريخ 30 كانون الأول/ديسمبر 1899. يخزن access التواريخ قبل 30 كانون الأول/ديسمبر 1899 الأرقام السالبة.

وقت صالح نطاق قيم من.0 (00: 00:00) إلى.99999 (23: 59:59). قيمة رقمية تمثل جزء يوم واحد. يمكنك تحويل قيمة رقمية إلى ساعات ودقائق وثواني بضرب القيمة الرقمية 24.

يوضح الجدول التالي كيف يقوم Access بتخزين قيم التاريخ/الوقت:
Double Date Actual Time Actual
number portion date portion time
------------------------------------------------------------------

1.0 1 December 31, 1899 .0 12:00:00 A.M.
2.5 2 January 1, 1900 .5 12:00:00 P.M.
27468.96875 27468 March 15, 1975 .96875 11:15:00 P.M.
36836.125 36836 November 6, 2000 .125 3:00:00 A.M.
لترى كيف يقوم Access بتخزين قيم التاريخ/الوقت كأرقام، اكتب الأوامر التالية في الإطار الحالي واضغط ENTER، وثم لاحظ النتائج:

?CDbl(#5/18/1999 14:00:00#)
يؤدي يساوي: 36298.5833333333

?CDbl(#12/14/1849 17:32:00#)
يؤدي يساوي:-18278.7305555556

لعرض التاريخ والوقت القيم الرقمية، اكتب الأوامر التالية في الإطار الحالي واضغط ENTER، وثم لاحظ النتائج:

?CVDate(1.375)
يؤدي يساوي: 31/12/1899 الساعة 9:00 صباحا

?CVDate(-304398.575)
يؤدي يساوي: 8/1/1066 1:48:00 م

تنسيق حقل تاريخ/وقت

يمكنك تنسيق قيمة تاريخ/وقت لعرض تاريخاً أو وقتاً أو كليهما. عند استخدام تنسيق التاريخ فقط، يخزن Access قيمة 0 لجزء الوقت. عند استخدام تنسيق وقت فقط، يخزن Access قيمة 0 للجزء التاريخ.

يوضح الجدول التالي كيف يقوم Access بتخزين قيم التاريخ/الوقت. كما يوضح الجدول التالي كيفية عرض هذه القيم باستخدام تنسيقات مختلفة:
Stored value Default format Custom format
(double number) (General Date) (mm/dd/yyyy hh:nn:ss A.M./P.M.)
---------------------------------------------------------------------

36295.0 5/15/99 05/15/1999 12:00:00 AM
0.546527777777778 1:07 PM 12/30/1899 01:07:00 PM
36232.9375 3/13/99 10:30PM 03/13/1999 10:30:00 PM
ملاحظة: التنسيق الافتراضي لقيمة تاريخ/وقت هو تاريخ عام. إذا كانت قيمة تاريخ فقط، يظهر أي وقت من الأوقات. إذا كانت القيمة وقت فقط، يظهر أي موعد.

حساب البيانات الوقت

لأنه يتم تخزين قيمة وقت ككسر يوم 24 ساعة، قد تتلقى نتائج التنسيق غير صحيحة عند حساب فترات زمنية أكبر من 24 ساعة. للتغلب على هذه المشكلة، يمكنك إنشاء دالة معرفة من قبل المستخدم للتأكد من أن يتم تنسيق الفواصل الزمنية بشكل صحيح.

توفر Microsoft أمثلة برمجية للتوضيح فقط، دون أي ضمان صريح أو ضمني. هذا يتضمن، على سبيل المثال لا الحصر، الضمانات الضمنية الخاصة بالتسويق أو الملاءمة لغرض معين. تفترض هذه المقالة أنك معتاد على لغة البرمجة التي يتم شرحها والأدوات المستخدمة لإنشاء الإجراءات وتصحيحها. يساعد مهندسو الدعم لدى Microsoft في شرح وظيفة إجراء محدد، لكنهم لن يقوموا بتعديل هذه الأمثلة لتقديم وظيفة إضافية أو إنشاء إجراءات تستوفي متطلبات محددة. لحساب بشكل صحيح وتنسيق الفواصل الزمنية، اتبع الخطوات التالية:

  1. إنشاء وحدة نمطية واكتب السطر التالي في مقطع Declarations إذا السطر التالي لم يكن هناك:

    Option Explicit
  2. اكتب الإجراء التالي:

    '------------------------------------------------------------------
    ' This function calculates the elapsed time between two values and then
    ' formats the result in four different ways.
    '
    ' The function accepts interval arguments such as the following:
    '
    ' #5/12/95 6:00:00AM# - #5/11/95 10:00:00PM#
    '
    '
    '
    ' [End Time]-[Start Time]
    '------------------------------------------------------------------

    Function ElapsedTime (Interval)
    Dim x
    x = Int(CSng(Interval * 24 * 3600)) & " Seconds"
    Debug.Print x
    x = Int(CSng(Interval * 24 * 60)) & ":" & Format(Interval, "ss") _
    & " Minutes:Seconds"
    Debug.Print x
    x = Int(CSng(Interval * 24)) & ":" & Format(Interval, "nn:ss") _
    & " Hours:Minutes:Seconds"
    Debug.Print x
    x = Int(CSng(Interval)) & " days " & Format(Interval, "hh") _
    & " Hours " & Format(Interval, "nn") & " Minutes " & _
    Format(Interval, "ss") & " Seconds"
    Debug.Print x

    End Function
  3. اكتب السطر التالي في الإطار الحالي، ومن ثم اضغط مفتاح الإدخال ENTER:

    ? ElapsedTime(#6/1/1999 8:23:00PM#-#6/1/1999 8:12:12AM#)
    لاحظ ظهور القيم التالية:

    ثانية 43848
    730:48 Minutes:Seconds
    12:10:48 Hours:Minutes:Seconds
    0 أيام 12 ساعة 10 دقائق 48 ثانية

مقارنة بيانات التاريخ

لأنه يتم تخزين التواريخ والأوقات كأرقام الدقة المزدوجة معا، قد تتلقى نتائج غير متوقعة عند مقارنة بيانات التاريخ/الوقت. على سبيل المثال، إذا قمت بكتابة التعبير التالي في الإطار الحالي، تتلقى نتائج خاطئة حتى إذا كان تاريخ اليوم 31/3/1999:

? Now()=DateValue("3/31/1999")
ترجع الدالة now () رقم الدقة المزدوجة يمثل التاريخ الحالي والوقت الحالي. ومع ذلك، ترجع الدالة DateValue() عدد صحيح يمثل التاريخ لكن لا قيمة وقت كسرية. ولذلك، يساوي now () DateValue() فقط عند إرجاع now () في الساعة 00:00:00 (12:00:00 ص).

لتلقي النتائج دقيقة عند مقارنة قيم التاريخ، استخدم إحدى الدالات التالية. لاختبار كل دالة كتابة الدالة في الإطار الحالي استبدال تاريخ 31/3/1999 الحالي ومن ثم اضغط مفتاح الإدخال ENTER:

  • لإرجاع قيمة عدد صحيح، استخدم الدالة date () :

    ?Date()=DateValue("3/31/1999")

  • لإزالة الجزء الكسري للدالة now () ، استخدم الدالة Int() :

    ?Int(Now())=DateValue("3/31/1999")

مقارنة البيانات الوقت

عند مقارنة قيم الوقت، قد تتلقى نتائج غير متناسقة لأنه يتم تخزين قيمة وقت كالجزء الكسري رقم الفاصلة العائمة، الدقة المزدوجة. على سبيل المثال، إذا قمت بكتابة التعبير التالي في الإطار الحالي، تظهر نتيجة false (0) على الرغم من أن الوقت بين قيم تبدو:

var1 = #2:01:00 PM#
var2 = DateAdd ("n"، 10، var1)
? var2 = #2:11:00 PM#
عندما يقوم Access بتحويل قيمة زمنية لكسر، قد لا تكون النتائج المحسوبة مطابقة لقيمة الوقت. الفرق الصغيرة نتيجة الحساب كافية للحصول على نتيجة false (0) عند مقارنة قيمة مخزنة إلى قيمة ثابتة.

لتلقي النتائج دقيقة عند مقارنة قيم الوقت، استخدم إحدى الطرق التالية. لاختبار كل أسلوب واكتب كل أسلوب في الإطار الحالي ثم اضغط مفتاح الإدخال ENTER:

إضافة تاريخ مقترنة إلى مقارنة الوقت:

var1 = #1/1/99 2:01:00 PM#
var2 = DateAdd ("n"، 10، var1)
? var2 = #1/1/99 2:11:00 PM#
تحويل قيم الوقت إلى أنواع بيانات السلسلة قبل أن يمكنك مقارنة:

var1 = #2:01:00 PM#
var2 = DateAdd ("n"، 10، var1)
? CStr(var2) = CStr(#2:11:00 PM#)
استخدم الدالة DateDiff() لمقارنة وحدات دقيقة مثل ثانية:

var1 = #2:01:00 PM#
var2 = DateAdd ("n"، 10، var1)
? DateDiff ("s"، var2، # 2:11:00 م #) = 0

المراجع

لمزيد من المعلومات حول حساب قيم التاريخ والوقت القيم، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

المهام 210604 لحساب وعرض قيم التاريخ/الوقت في الوصول

لمزيد من المعلومات حول كيفية تنسيق أنواع بيانات التاريخ/الوقت، انقر فوق تعليمات Microsoft Access
القائمة تعليمات ، اكتب الخاصية format-نوع بيانات التاريخ/الوقت في "مساعد Office" أو "معالج الإجابة"، ومن ثم انقر فوق بحث لعرض الموضوع.

هل تحتاج إلى مزيد من المساعدة؟

توسيع المهارات
استكشاف التدريب
الحصول على الميزات الجديدة أولاً
الانضمام إلى Microsoft Insider

هل كانت المعلومات مفيدة؟

نشكرك على ملاحظاتك!

شكراً لك على الملاحظات! يبدو أنه من المفيد إيصالك بأحد وكلاء دعم Office لدينا.

×