# 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 作為記錄值。

{% hint style="info" %}
若需要描述西元（Gregorian years AD） 1-99 年，請將年份數值以 0補滿 4 位數（例如：0099 表示西元 99 年）
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.postgresql.tw/appendixes/date-time-support/b.1.-ri-qi-shi-jian-jie-yi-liu-cheng.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
