B.1. 日期時間解譯流程

日期時間資料將會以下列流程解譯:(分隔符號均為半型文字)

  1. 以分隔符號將其分解為多個段落,如字串、時區或數字。

    1. 如果是以冒號(:)分隔的數字格式,那麼這是一個時間的字串,其所包括的內容都是時間資訊的一部份。

    2. 如果是以連字號(-)、斜線(/)、或兩個以上的間隔號(.)所分隔的數字格式,那麼這是一個日期的字串,它可能包含文字型式的月份名稱。但如果日期分隔符號已經先出現了,那麼它將被解釋為時區資訊(例如:Asia/Taipei)。

    3. 如果整個字串都是數字所組成,那麼它可能是符合ISO 8601格式的日期(例如:19990113,表示西元1999年1月3日),或時間(例如:141516,表示14:15:16)。

    4. 如果它是以加號(+)或減號(-)開頭的話,那麼它是一個數字型態的時區資訊或是特別的區間。

  2. 如果是一個字串,進行下列比對規則:

    1. 以 binary-search 表格,尋找時區的表示字。

    2. 如果沒有找到的話,則搜尋慣用字(如:today),星期(如:Thursday),月份(如:January),或介系詞(如:at, on)。

    3. 如果都沒有找到,就回傳錯誤訊息。

  3. 如果是一個由數字組成的字串,則進行下列判斷:

    1. 如果是 8 個或 6 個數字,而先前也沒有讀到其他日期的資訊,那麼它會被解譯為一個數字型態的日期(如:19990118 或 990118),對應年月日格式為 YYYYMMDD 或 YYMMDD。

    2. 如果是 3 位數字,而且先前已處理到年份資訊的話,那麼它會被解譯為該年的第幾天。

    3. 如果是 4 位或 6 位數字,而且先前已處理到年份資訊的話,那麼它會被解譯為時間資訊,對應格式為 HHMM 或 HHMMSS。

    4. 如果是 3 個或更多的數字,並且先前未處理到日期資訊的話,那麼它會是年份資訊。(這里將直接判斷為 yy-mm-dd 的日期格式。)

    5. 最後,日期格式將依 DateStyle 所定義的,設定為:mm-dd-yy,dd-mm-yy,或yy-mm-dd。其中如果月份或日子名稱無法找到合法字詞的話,那將會回傳錯誤的訊息。

  4. 如果指定了 BC(西元前)的話,那麼實際儲存值將是負的年份數再加1。(陽曆 Gregorian year 中並無西元 0 年,所以西元 1 年,以數值 0 作為年份的記錄值。)

  5. 沒有指定 BC 的 2 位數年份,將自動被調整為4位數。其規則為:若小於 70,則加 2000 作為其記錄值,否則就加 1900 作為記錄值。

若需要描述西元(Gregorian years AD) 1-99 年,請將年份數值以 0補滿 4 位數(例如:0099 表示西元 99 年)