כיצד לאחסן, לחשב ולהשוות את נתוני תאריך/שעה ב- Microsoft Access

עבור גירסת Microsoft Access 97 של מאמר זה, ראה
130514.

מתון: דורש מאקרו בסיסי, קידוד ומיומנויות יכולת פעולה הדדית.

סיכום

מאמר זה מתאר כיצד הקלד Microsoft Access מאחסן הנתונים תאריך/שעה. מאמר זה מתאר מדוע אתה עשוי לקבל תוצאות לא צפויות בעת חישוב תאריכים ושעות או להשוות בין תאריכים ושעות.

מאמר זה מתאר את הנושאים הבאים:

  • לאחסן נתוני תאריך/שעה

  • עיצוב של שדה תאריך/שעה

  • חישוב נתוני זמן

  • השווה בין נתוני תאריך

  • השווה בין נתוני זמן

מידע נוסף

לאחסן נתוני תאריך/שעה

Access מאחסן סוג הנתונים תאריך/שעה כ דיוק כפול, הנקודה הצפה למספר עד 15 ספרות מימין לנקודה העשרונית. החלק השלם של מספר דיוק כפול מייצג את התאריך. החלק העשרוני מייצג את השעה.

ערכי תאריך חוקיים נעים מ--657,434 (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:00 9:00

?CVDate(-304398.575)
לגרום שווה ל: 1/8/1066 1 48: 12: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 יכולים לסייע בהסברת הפונקציונליות של פרוצדורה מסוימת, אך הם לא ישנו את הדוגמאות כדי לספק פונקציונליות נוספת או כדי לבנות פרוצדורות שיענו על צרכיך הספציפיים. כדי לחשב נכונה וכדי לעצב מרווחי הזמן, בצע את הפעולות הבאות:

  1. צור מודול ולאחר מכן הקלד את השורה הבאה במקטע ההצהרות אם השורה הבאה אינה נמצאת שם כבר:

    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 שניות

השווה בין נתוני תאריך

מאחר תאריכים ושעות מאוחסנים יחד כמספרים בעלי דיוק כפול, ייתכן שתקבל תוצאות לא צפויות בעת השוואת נתוני תאריך/שעה. לדוגמה, אם תקליד את הביטוי הבא בחלון מיידי, תקבל תוצאה False גם אם התאריך היום הוא 31/3/1999:

? Now()=DateValue("3/31/1999")
הפונקציה now () מחזירה מספר דיוק כפול המייצג את התאריך והשעה הנוכחיים את הנוכחי. עם זאת, הפונקציה DateValue() מחזירה מספר שלם המייצג את התאריך אך לא ערך זמן השבר. לכן, now () שווה DateValue() רק כאשר now () מחזירה שעה 00:00:00 (12: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 PM #) = 0

הפניות

לקבלת מידע נוסף אודות חישוב ערכי תאריך וערכי זמן, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:

פונקציות 210604 לחישוב ועבור הצגת ערכי תאריך/שעה ב- Access

לקבלת מידע נוסף אודות כיצד לעצב את סוגי הנתונים תאריך/שעה, לחץ על עזרה של Microsoft Access בסרגל ה
בתפריט עזרה , הקלד המאפיין עיצוב - סוג הנתונים תאריך/שעה במסייע של Office או באשף התשובות ולאחר מכן לחץ על חיפוש כדי להציג את הנושא.

זקוק לעזרה נוספת?

הרחב את הכישורים שלך
סייר בהדרכה
קבל תכונות חדשות לפני כולם
הצטרף למשתתפי Microsoft insider

האם מידע זה היה שימושי?

תודה על המשוב!

תודה על המשוב! נראה שכדאי לקשר אותך לאחד מנציגי התמיכה של Office.

×