這份文件的 Microsoft Access 97 版本,請參閱
130514

中級使用者: 需要基本巨集、 編碼和交互操作性技巧。

摘要

本文將告訴 Microsoft Access 儲存區的日期/時間資料的輸入方式。本文也說明為何您會收到未預期的結果時計算日期和時間,或比較日期和時間。

本篇文章將探討下列主題:

  • 儲存日期/時間資料

  • 格式化日期/時間] 欄位

  • 計算時間資料

  • 比較日期的資料

  • 比較時間資料

更多的資訊

儲存日期/時間資料

存取存放區的日期/時間資料型別為雙精度浮點數值,最多 15 個小數位數。雙精度數字的整數部分代表日期。小數部分代表的時間。

有效的日期值範圍從-657,434 (西元年 1 月 1,100年) 到 2,958,465 (年 12 月 31 9999 a.d.紀元日)。日期設定為 0 表示 1899 年 12 月 30 日。貨運 1899 年 12 月 30 日之前的日期為負數。

有效的時間值的範圍從.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)
造成等於: 12/31/1899年上午 9:00: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. 建立模組,,然後輸入下列命令的宣告區段中,如果下面這一行已經不存在:

    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 秒

比較日期的資料

因為日期和時間儲存在一起,做為雙精度數字,您可能會收到未預期的結果,當您比較日期/時間資料時。例如,如果您在即時運算視窗中輸入下列運算式,您收到錯誤的結果即使今天的日期是 3/31/1999年:

? Now()=DateValue("3/31/1999")
Now ()函數會傳回雙精度數字,表示目前的日期和目前的時間。不過, DateValue()函數會傳回整數數字代表日期,但不是小數時間數值。因此, now ()會now ()傳回 00:00:00 (上午 12:00:00) 的時間時,才等於DateValue() 。

若要接收精確的結果,當您比較日期值時,使用其中一個下列的函式。若要測試每個函式,即時運算視窗中輸入函式取代 3/31/1999年的目前日期,然後按 ENTER 鍵:

  • 若要傳回的整數值,使用為函式:

    ?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 知識庫 」 中的文件:

210604函數來計算和顯示在 Access 中的日期/時間值

如需有關如何格式化日期/時間資料類型的詳細資訊,請按一下Microsoft Access 說明
說明] 功能表中,在 Office 小幫手 」 或 「 解答精靈中,輸入格式屬性-日期/時間資料型別,,然後按一下 [搜尋],以檢視主題。

需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

您對翻譯品質的滿意度為何?

會影響您使用體驗的因素為何?

是否還有其他的意見反應? (選填)

感謝您的意見反應!

×