Skip to content

B.1. 日期/时间输入解释#

使用以下过程解码日期/时间输入字符串。

  1. 将输入字符串分解为标记,并将每个标记归类为字符串、时间、时区或数字。

    1. 如果数字标记包含冒号 (:),则这是一个时间字符串。包括所有后续数字和冒号。

    2. 如果数字标记包含破折号 (-)、斜杠 (/) 或两个或更多点 (.),则这是一个可能包含文本月份的日期字符串。如果已经看到日期标记,则将其解释为时区名称(例如,America/New_York)。

    3. 如果标记仅为数字,则它是一个单字段或 ISO 8601 连接的日期(例如,19990113 表示 1999 年 1 月 13 日)或时间(例如,141516 表示 14:15:16)。

    4. 如果标记以加号 (+) 或减号 (-) 开头,则它是一个数字时区或一个特殊字段。

  2. 如果标记是字母数字字符串,则与可能的字符串匹配

    1. 查看标记是否与任何已知时区缩写匹配。这些缩写由 第 B.4 节 中描述的配置文件提供。

    2. 如果未找到,则搜索内部表以将令牌与特殊字符串(例如,today)、日期(例如,Thursday)、月份(例如,January)或噪音词(例如,aton)匹配。

    3. 如果仍未找到,则抛出错误。

  3. 当令牌为数字或数字字段时

    1. 如果有八位或六位数字,并且之前没有读取任何其他日期字段,则解释为连接日期(例如,19990118990118)。解释为YYYYMMDDYYMMDD

    2. 如果令牌为三位数字并且已经读取了年份,则解释为一年中的第几天。

    3. 如果为四位或六位数字并且已经读取了年份,则解释为时间(HHMMHHMMSS)。

    4. 如果为三位或更多位数字并且尚未找到任何日期字段,则解释为年份(这强制剩余日期字段的 yy-mm-dd 顺序)。如果发现月份或日期字段超出范围,则抛出错误。

    5. 否则,日期字段顺序假定遵循DateStyle设置:mm-dd-yy、dd-mm-yy 或 yy-mm-dd。如果发现月份或日期字段超出范围,则抛出错误。

  4. 如果指定了公元前,则对年份取反并加一以进行内部存储。(格里高利历中没有公元 0 年,因此数字 1 公元前变为公元 0 年。)

  5. 如果未指定公元前,并且年份字段长度为两位,则将年份调整为四位。如果字段小于 70,则添加 2000,否则添加 1900。

    提示

    格里高利历 1-99 年可以使用 4 位数字和前导零输入(例如,0099是 99 年)。