日期与时间
完整的时间参考:日期、时长运算、时钟、时区、时间戳/ISO、Timespan、视频时间码、工作日历和特殊日期。
Numlex 把日期和时间视为一等量值,并配有严格、有界的语法。一行要么精确匹配某个日期或时间模式,
要么保持为普通文字——May 5 + 3 weeks 有效,May 5 + 43 是错误,单独的月份单词不是日期。
日历运算按本地公历的组成部件进行,因此夏令时切换不会移动日期。
本页是完整的时间参考:日历日期、时长运算、时钟与 laptime、时区、时间戳与 ISO 8601、
Timespan 记法、视频时间码与帧、工作日历、特殊日期、它们对设置的依赖以及严格的错误规则。
日历日期
<date> [ <sign> <integer> <duration> ... ]
<date> := today | tomorrow | yesterday
| <month> <day>
| <month> <day>, <year>
| <day> <month> [<year>]
<duration> := day(s) | week(s) | month(s) | year(s)
所有单词均为英文且不区分大小写;符号是 + 或 −(ASCII - 也可)。月份,缩写与全称:
| # | 缩写 | 全称 |
|---|---|---|
| 1 | jan | january |
| 2 | feb | february |
| 3 | mar | march |
| 4 | apr | april |
| 5 | may | may |
| 6 | jun | june |
| 7 | jul | july |
| 8 | aug | august |
| 9 | sep, sept | september |
| 10 | oct | october |
| 11 | nov | november |
| 12 | dec | december |
today、tomorrow 和 yesterday 依据捕获的本地日期解析,并可与时长组合。复合周期按日历
部件逐项应用:March 12 + 3 weeks 2 days → Apr 4,May 10 - 1 week 3 days。每个部件
上限为 1,000,000。
当输入指定了年份,或结果落在输入年份之外时,结果会显示年份。锚点是本地正午,因此 DST 切换 永远不会移动日期。
today → today (per the local calendar)
tomorrow + 1 month
yesterday - 2 weeks
May 5 → May 5 (current year)
May 5, 2026 + 30 days → Jun 4, 2026
5 May 2026
dec 31
日期语法错误:
- 周期超过 1,000,000 是静默错误。
Feb 30形似日期但无效——静默错误。May 5 + 43(数字后没有时长词)是错误,绝不会被降级为普通算术。May 5 + 43 days extra——有效日期后的多余内容——是错误。- 单独的月份单词(
may)不是日期;它保持为普通文字。
时长运算
连续多个固定时间单位会被读作一个时长:
1 h 45 min、1 hour 45 minutes、2 hr 5 mins、1 day 2 hours 30 min、1 min 250 ms、1 week 2 days。- 安全紧贴形式:
1h45min、45min、30sec、500ms、2hr、2wks、1day2hours30min。紧贴别名只来自白名单 (ms s sec secs second(s) min mins minute(s) h hr hrs hour(s) day(s) week(s) wk wks);单独的紧贴m绝不是分钟(5m= 5,000,000,5 m= 米), 单独的紧贴s不被接受。 - 复合时长使用从
ms到week的固定单位。平均日历单位(mo、yr、quarter (time)) 和无关单位不会隐式组合:1 m 20 cm是错误,1 mo 2 days不组合。
部件可以任意顺序出现并可重复;数值相加。该分组在乘法或除法之前绑定为一个主操作数:
1 h 30 min / 3 → 30 min (not 1 h 10 min)
(1 h 20 min) × 2 → 2 h 40 min
3 × (1 h 15 min) → 3 h 45 min
1 h 45 min + 30 min → 2 h 15 min
2 hr 10 min - 45 min → 1 h 25 min
1 day 2 h + 90 min → 1 day 3 h 30 min
1 week 2 days - 1 day → 1 week 1 day
2 min 30 sec × 3 → 7 min 30 s
1 min 250 ms + 750 ms → 1 min 1 s
1.5 h + 30 min → 2 h
时长仍是真正的类型化量值(维度 T¹、真实时间单位、其刻度上的值),而不是字符串,也不是
无量纲秒数。括号、一元负号、含时间的变量和常量都可用
(focus time = 1 h 30 min,然后 focus time + 15 min = 1 h 45 min),时长也可以像其他
量值一样生成 token。
输出使用自然的规范拆分(周、天、小时、分钟、秒;亚秒余数用毫秒),省略零部件,规范化进位,
并只打印一个符号:2 h 15 min、1 day 3 h 30 min、7 min 30 s、-30 min、500 ms。
显式转换会把自然形式重置为单一单位结果:1 h 30 min to min = 90 min,
1 h 30 min in hours = 1.5 h,1 h 30 min as seconds = 5400 s。
速度与派生单位永远不会变成时长(90 km / 3 h = 30 km/h),日期语法保持优先级
(May 5 + 2 days 是日期)。时长没有逐答案的记法或舍入控制。
时钟与 laptime
时钟语法先于混合单位与日期处理:
3:30pm + 2 hours 15 minutes → 5:45 pm
3:30pm - 2 hours 15 minutes → 1:15 pm
11:30pm + 45 min → Tomorrow 12:15 am
now + 3 hours 25 minutes → local wall time + 3 h 25 min
01:02:03 + 01:09:54 → 02:11:57 (elapsed time / laptime)
00:00:01.5 + 00:00:01 → 00:00:02.50
7:30am to 8:45pm → 13 h 15 min (interval forward)
4pm to 3am → 11 h
3:30pm as laptime → 15:30:00
接受的形式有 h:mm、h:mm:ss、h am/pm 和 4pm;AM/PM 不区分大小写,可紧贴或空格分隔。
分钟和秒为 0…59,12 小时制小时为 1…12,24 小时制为 0…23(25:00 是严格错误)。加减法基于
墙钟部件,因此 DST 切换不会移动所请求的分钟数,跨日会打印 Yesterday/Today/Tomorrow。
clock + clock(3:30pm + 3:30pm)是严格错误;不带 AM/PM 的裸 h:mm:ss 保持为经过时间,
而不是一天中的时刻。显示遵循区域:legacy/北美为 12 小时制,欧洲为 24 小时制,System 遵循
区域设置的小时周期。时钟行不计入 Total,没有记法或舍入(仅 Copy/Delete),也无法成为数字
token。
时区
time in Paris → current time in the zone
Tokyo time → same, "<place> time" form
date in Vancouver → date in the zone
6pm Sydney in Chicago → 3:00 am
2am PST to GMT → 10:00 am
3pm GMT+8 to Paris → 9:00 am
7:30am LAX to Japan → 11:30 pm
time difference between Chicago and Paris → 7 h
difference between PDT & AEST → 17 h
来源通过完整的离线目录解析:IANA 标识符和别名、城市(带 City, CC 限定)、国家名称、
国家代码、IATA/ICAO 代码、固定缩写(EST/EDT/CST/CDT/MST/MDT/PST/PDT/AKST/AKDT/HST、
AEST/AEDT/ACST/ACDT/AWST/NZST/NZDT/BST/CET/CEST/EET/EEST/MSK/JST/KST/HKT/SGT)以及
GMT/UTC/GMT±H[:MM]。来源墙钟时间锚定到其时区中捕获的日期,转换为一个绝对时刻,
再在目标时区显示,因此 A → B → A 保留时刻;真实的 DST 切换会被遵循,源时间不存在则是严格
错误。时区行上的未知地点是严格错误。裸 6pm、日期和地理行按各自规则处理。自定义别名
(Settings → Dates & Times)只覆盖已知的名称/IANA 标识符,并且只存在于应用中——绝不会进入
.nlx。
离线时区目录
应用内置一个时区目录(约 1 MB):IANA 标识符和别名、人口不少于 100,000 的城市、国家 → 首都时区、IATA/ICAO → 时区。数据来自公共来源 (IANA tzdata、GeoNames、airportsdata),完全离线使用,无需网络。
时间戳与 ISO 8601
时间戳语法先于单位转换和普通日期回退处理:
current timestamp → 1,554,112,800 (number from captured now)
April 1, 2019 3:30pm as iso8601 → 2019-04-01T15:30:00+02:00
2019-04-01T15:30:00 to date → Apr 1, 2019 3:30:00 pm
April 1, 2019 to timestamp → 1,554,112,800
1559740303.48 to date → Jun 5, 2019 3:11:43 pm
1733823083000 to date → Dec 10, 2024 10:31:23 am
秒是从 1970-01-01T00:00:00Z 起的 Unix 时间;允许有限小数值。1e12 及以上的值会按毫秒
处理(1733823083000 to date)。不带时间的日期绑定到 to timestamp 时锚定到本地正午(对 DST
安全)。ISO 形式接受 Z、±HH:MM、可选秒和小数部分;显式偏移会保留为表示时区,否则使用
你的本地时区。ISO 输出为 yyyy-MM-dd'T'HH:mm:ssXXX;日期时间输出遵循区域
12/24 小时风格,并使用固定的英文顺序(Apr 1, 2019 3:30 pm)。无效、不存在(DST 缺口)
和溢出的值都是严格错误。日期/ISO 行不计入内联和页脚 Total,也不进入 Previous Answer 数字
链;其上的 token 安全地保持不活动。
Timespan
Timespan 记法在全局(Numbers → Default answer format)或逐答案(右键菜单中的 Number
Format)选择,并且只适用于时间维度的量值;任何非时间数字都会回落到 Automatic。
显式 as timespan 后缀不受该设置影响:
5.5 minutes as timespan → 5 min 30 s
4.54 hours as timespan → 4 hours 32 minutes 24 seconds
72 days as timespan → 10 weeks 2 days
3 hours 5 minutes 10 seconds → 3 h 5 min 10 s
3h 5m 10s in seconds → 11,110 s
格式器按平均单位 yr = 365.2425 d 和 mo = 30.436875 d,再按周、天、小时、分钟、秒和
ms 贪婪拆分;打印一位小数,省略零部件,并把舍入进位到最大部件。平均 yr/mo 只是线性
因子:日历运算(+ 1 month)仍使用 Calendar 部件。紧贴单位语法:在已证明的时长链
3h 5m 10s 内,m 和 s 表示分钟和秒;单独的 5m(5,000,000)、5 m(米)和 10s
不变。in seconds/in minutes/… 重置为单一标准表示。同一套类型化语法服务于普通行、赋值
和 Answer Token 表达式。
视频时间码与帧
时间码语法先于时钟和混合单位处理:
03:10:20:05 at 30 fps + 50 frames → 03:10:21:25
00:10:20:50 @ 60 fps + 10 minutes → 00:20:20:50
00:30:10:00 @ 24 fps in frames → 43,440 frames
43,440 frames @ 24 fps → 00:30:10:00
03:10:20:05 at 30 fps + 03:10:20:010 → 06:20:40:15
03:10:20:05 at 12 fps - 00:20:35:00 → 02:49:45:05
30 fps × 3 minutes → 5,400 frames
15.6k frames / 24 fps → 650 s
帧会被精确计数(绝不经过舍入后的秒数):fps 是 1 到 1000 的整数,不支持
drop-frame 语法。时间码表达式中 fps 表示每秒帧数;表达式外保留原有的速度别名 fps = ft/s。任何
运算都必须有 FPS;频率冲突、缺少 fps、超出范围、帧计数溢出和损坏代码都是严格错误。帧字段
会规范化进位,并至少打印两位数字(接受输入 :010)。时间码和帧行不计入 Total、舍入和
Previous Answer 数字链;其上的 token 不活动。
工作日历与节假日
工作日是周一至周五减去所选区域的公共节假日。日期范围是 start-exclusive/end-inclusive; 缺少年份时使用捕获的当前年份。不支持的地区或年份是严格错误,而不是静默跳过节假日。
workdays in 3 weeks → 15 workdays
10 March to 17 March in workdays → 5 workdays
workdays from April 12 to June 15 → 44 workdays
$500/workday × 4 weeks → $10,000.00
work hours in June → 6 day 16 h
work hours between March 12 and March 25 → 3 day
55h in work days → 6.875 workdays
December 24 + 2 workdays → Dec 29
别名:workday(s)、work day(s)、business day(s)、weekday(s);查询
weekday on <date> 和普通文字不会被捕获。无日期的周按每周五个工作日计算。工作时长是类型化
时长;每个工作日的金额费率保留货币形式;每个工作日的工时来自设置(1…24)。节假日来自
内置的离线目录(25 个国家,2019–2035),不使用网络;目录未覆盖的
地区或年份是错误。
特殊日期
这些特殊日期已内置:
Easter → Apr 20 (captured current year)
Easter 2027 → Mar 28, 2027
Christmas → Dec 25
days until Christmas → 344 days
days until Easter → 95 days
Easter 2027 + 2 days → Mar 30, 2027
复活节使用公历 computus;days until 的最近一次出现取今年的日期(若仍在未来),
否则取明年。未知节日名(days until Festivus)是严格错误,包含 christmas/easter 的
普通文字不会被捕获。圣诞节始终是 12 月 25 日。
设置依赖
日期和时间根据每个工作表捕获的一个 now、本地公历和时区以及区域小时样式(12/24)计算:legacy/北美为 12 小时制,西欧/
东欧为 24 小时制,System 遵循区域设置的小时周期。
持久化的日期/时间设置:
- Hours per workday(1…24,默认 8),供工作时长和工作日换算使用。
- Holiday region(默认
automatic);工作日跳过该区域的公共节假日,不支持的地区会在 带日期的工作日查询中严格失败。 - 自定义时区,最多 100 个,每个都有名称和 IANA 标识符。
这些偏好是应用全局的,绝不会进入 .nlx 导出或工作表。
合计、token 与错误
- 时钟、日期、时间戳/ISO 和时间码行不计入内联和页脚 Total,没有记法或舍入,也不进入 Previous Answer 数字链(其上的 token 保持不活动)。
- 时长是真正的类型化量值:它们通过变量、常量和 token 传播,并在表达式中像其他量值一样 工作。
- 未知地点、不支持的工作日地区/年份、无效或不存在的日期、无效时钟值、缺少 fps 和溢出值 都是严格错误——绝不是猜测的数字。