当 Org mode 提示输入日期/时间时,默认值会以标准日期/时间格式显示, 因此提示看起来像是要求特定格式。但实际上它支持多种格式的日期/时间输入。 通常信息应从字符串开头开始,Org mode 会提取已有信息, 并从 默认日期时间(default date and time) 补全未指定部分。 默认值通常为当前日期时间,但修改已有时间戳 或输入区间第二个时间戳时,会沿用缓冲区中的时间。 填写信息时,Org mode 假定你大多想输入未来日期: 若省略月/年且给定的日/月 早于 今天, 会自动识别为未来日期62。 若日期被自动顺延到未来,时间提示会显示 ‘(=>F)’ 。
例如,假设今天是 2006 年 6 月 13 日 。 以下是不同输入的解析结果,Org mode 自动补全的部分以 粗体 标出。
| ‘3-2-5’ | ⇒ 2003-02-05 |
| ‘2/5/3’ | ⇒ 2003-02-05 |
| ‘14’ | ⇒ 2006-06-14 |
| ‘12’ | ⇒ 2006-07-12 |
| ‘2/5’ | ⇒ 2007-02-05 |
| ‘Fri’ | ⇒ 最近的星期五(默认日期或之后) |
| ‘sep 15’ | ⇒ 2006-09-15 |
| ‘feb 15’ | ⇒ 2007-02-15 |
| ‘sep 12 9’ | ⇒ 2009-09-12 |
| ‘12:45’ | ⇒ 2006-06-13 12:45 |
| ‘22 sept 0:34’ | ⇒ 2006-09-22 0:34 |
| ‘w4’ | ⇒ 2006 年的 ISO 第 4 周 |
| ‘2012 w4 fri’ | ⇒ 2012 年 ISO 第 4 周的星期五 |
| ‘2012-w04-5’ | ⇒ Same as above |
此外,你可以在输入的 开头 指定相对日期:输入正负号、数字和字母—‘h’ 、 ‘d’ 、 ‘w’ 、 ‘m’ 或 ‘y’—分别表示小时、天、周、月或年的偏移量。使用 ‘h’ 时,日期相对于当前时间计算;使用其他字母且只有单个正负号时,日期相对于当日 00:00 计算。使用双正负号时,日期相对于默认日期计算。如果不用单个字母,而是使用星期几的缩写,则表示第 N 个对应星期几,例如:
| ‘+0’ | ⇒ 今天 |
| ‘.’ | ⇒ 今天 |
| ‘+2h’ | ⇒ 从现在起两小时后 |
| ‘+4d’ | ⇒ 从今天起四天后 |
| ‘+4’ | ⇒ 与 +4d 相同 |
| ‘+2w’ | ⇒ 从今天起两周后 |
| ‘++5’ | ⇒ 从默认日期起五天后 |
| ‘+2tue’ | ⇒ 从现在起第二个星期二 |
该函数支持英文月份与星期缩写。
若想使用完整名称或其他语言,
可配置变量 parse-time-months 和 parse-time-weekdays 。
并非所有 Emacs 实现都能表示所有日期。
默认情况下,Org mode 会将日期限制在 1970–2037 的兼容区间,
以适配所有 Emacs 版本。若需使用该区间外的日期,
请查阅变量 org-read-date-force-compatible-dates 的文档。
你可以通过指定起止时间或开始时间加时长(HH:MM 格式)定义时间区间。 前者使用一个或两个短横线分隔,后者使用 ‘+’ 分隔,例如:
| ‘11am-1:15pm’ | ⇒ 11:00-13:15 |
| ‘11h-13h15’ | ⇒ 同上 |
| ‘11am--1:15pm’ | ⇒ 同上 |
| ‘11am+2:15’ | ⇒ 同上 |
在小缓冲提示的同时,会弹出日历63。 退出日期提示时(点击日历日期或按 RET), 日历选中日期会与提示行输入信息合并。 你可以在小缓冲中完全控制日历:
| RET | 选中日历中光标所在的日期。 |
| mouse-1 | 点击选中对应日期。 |
| S-RIGHT | 向后一天。 |
| S-LEFT | 向前一天。 |
| S-DOWN | 向后一周。 |
| S-UP | 向前一周。 |
| M-S-RIGHT | 向后一个月。 |
| M-S-LEFT | 向前一个月。 |
| > | 日历向后滚动一个月。 |
| < | 日历向前滚动一个月。 |
| M-v | 日历向后滚动三个月。 |
| C-v | 日历向前滚动三个月。 |
| C-. | 选中今天的日期64 |
日期/时间提示的逻辑看似复杂,但熟悉后会非常顺手, 甚至会对其他日期输入方式感到不适。 为帮助理解,小缓冲会实时显示当前输入的解析结果65。
参见变量 org-read-date-prefer-future ,将其设为符号 time 可使早于当前时刻的时间自动跳转至次日。
若不需要日历,
可配置变量 org-popup-calendar-for-date-prompt 。
可使用日历命令 . 跳转至今日日期,但插入时间戳的小时部分时,. 会在小时后插入点号;与之相对,C-. 始终跳转至今日。
若觉得干扰,
可通过 org-read-date-display-live 关闭该显示。