- systemd.index 中文手册
- systemd.directives 中文手册
- binfmt.d 中文手册
- bootctl 中文手册
- bootup 中文手册
- busctl 中文手册
- coredump.conf 中文手册
- coredumpctl 中文手册
- crypttab 中文手册
- daemon 中文手册
- dnssec-trust-anchors.d 中文手册
- environment.d 中文手册
- file-hierarchy 中文手册
- halt 中文手册
- hostname 中文手册
- hostnamectl 中文手册
- hwdb 中文手册
- journal-remote.conf 中文手册
- journal-upload.conf 中文手册
- journalctl 中文手册
- journald.conf 中文手册
- kernel-command-line 中文手册
- kernel-install 中文手册
- loader.conf 中文手册
- locale.conf 中文手册
- localectl 中文手册
- localtime 中文手册
- loginctl 中文手册
- logind.conf 中文手册
- machine-id 中文手册
- machine-info 中文手册
- machinectl 中文手册
- modules-load.d 中文手册
- networkctl 中文手册
- networkd.conf 中文手册
- nss-myhostname 中文手册
- nss-mymachines 中文手册
- nss-resolve 中文手册
- nss-systemd 中文手册
- os-release 中文手册
- pam_systemd 中文手册
- portablectl 中文手册
- resolvectl 中文手册
- resolved.conf 中文手册
- shutdown 中文手册
- sysctl.d 中文手册
- systemctl 中文手册
- systemd 中文手册
- systemd-analyze 中文手册
- systemd-ask-password 中文手册
- systemd-ask-password-console.service 中文手册
- systemd-backlight@.service 中文手册
- systemd-binfmt.service 中文手册
- systemd-bless-boot-generator 中文手册
- systemd-bless-boot.service 中文手册
- systemd-boot 中文手册
- systemd-boot-check-no-failures.service 中文手册
- systemd-cat 中文手册
- systemd-cgls 中文手册
- systemd-cgtop 中文手册
- systemd-coredump 中文手册
- systemd-cryptsetup-generator 中文手册
- systemd-cryptsetup@.service 中文手册
- systemd-debug-generator 中文手册
- systemd-delta 中文手册
- systemd-detect-virt 中文手册
- systemd-environment-d-generator 中文手册
- systemd-escape 中文手册
- systemd-firstboot 中文手册
- systemd-fsck@.service 中文手册
- systemd-fstab-generator 中文手册
- systemd-getty-generator 中文手册
- systemd-gpt-auto-generator 中文手册
- systemd-halt.service 中文手册
- systemd-hibernate-resume-generator 中文手册
- systemd-hibernate-resume@.service 中文手册
- systemd-hostnamed.service 中文手册
- systemd-hwdb 中文手册
- systemd-id128 中文手册
- systemd-importd.service 中文手册
- systemd-inhibit 中文手册
- systemd-initctl.service 中文手册
- systemd-journal-gatewayd.service 中文手册
- systemd-journal-remote.service 中文手册
- systemd-journal-upload.service 中文手册
- systemd-journald.service 中文手册
- systemd-localed.service 中文手册
- systemd-logind.service 中文手册
- systemd-machine-id-commit.service 中文手册
- systemd-machine-id-setup 中文手册
- systemd-machined.service 中文手册
- systemd-makefs@.service 中文手册
- systemd-modules-load.service 中文手册
- systemd-mount 中文手册
- systemd-networkd-wait-online.service 中文手册
- systemd-networkd.service 中文手册
- systemd-notify 中文手册
- systemd-nspawn 中文手册
- systemd-path 中文手册
- systemd-portabled.service 中文手册
- systemd-quotacheck.service 中文手册
- systemd-random-seed.service 中文手册
- systemd-rc-local-generator 中文手册
- systemd-remount-fs.service 中文手册
- systemd-resolved.service 中文手册
- systemd-rfkill.service 中文手册
- systemd-run 中文手册
- systemd-run-generator 中文手册
- systemd-sleep.conf 中文手册
- systemd-socket-activate 中文手册
- systemd-socket-proxyd 中文手册
- systemd-suspend.service 中文手册
- systemd-sysctl.service 中文手册
- systemd-system-update-generator 中文手册
- systemd-system.conf 中文手册
- systemd-sysusers 中文手册
- systemd-sysv-generator 中文手册
- systemd-time-wait-sync.service 中文手册
- systemd-timedated.service 中文手册
- systemd-timesyncd.service 中文手册
- systemd-tmpfiles 中文手册
- systemd-tty-ask-password-agent 中文手册
- systemd-udevd.service 中文手册
- systemd-update-done.service 中文手册
- systemd-update-utmp.service 中文手册
- systemd-user-sessions.service 中文手册
- systemd-vconsole-setup.service 中文手册
- systemd-veritysetup-generator 中文手册
- systemd-veritysetup@.service 中文手册
- systemd-volatile-root.service 中文手册
- systemd.automount 中文手册
- systemd.device 中文手册
- systemd.dnssd 中文手册
- systemd.environment-generator 中文手册
- systemd.exec 中文手册
- systemd.generator 中文手册
- systemd.journal-fields 中文手册
- systemd.kill 中文手册
- systemd.link 中文手册
- systemd.mount 中文手册
- systemd.netdev 中文手册
- systemd.network 中文手册
- systemd.nspawn 中文手册
- systemd.offline-updates 中文手册
- systemd.path 中文手册
- systemd.preset 中文手册
- systemd.resource-control 中文手册
- systemd.scope 中文手册
- systemd.service 中文手册
- systemd.slice 中文手册
- systemd.socket 中文手册
- systemd.special 中文手册
- systemd.swap 中文手册
- systemd.syntax 中文手册
- systemd.target 中文手册
- systemd.time 中文手册
- systemd.timer 中文手册
- systemd.unit 中文手册
- sysusers.d 中文手册
- timedatectl 中文手册
- timesyncd.conf 中文手册
- tmpfiles.d 中文手册
- udev 中文手册
- udev.conf 中文手册
- udevadm 中文手册
- user@.service 中文手册
- vconsole.conf 中文手册
systemd.time 中文手册
名称
systemd.time — 时间与日期规范
描述
在 systemd 环境中,时间戳(一个时间点)、时间长度(一段时间)、日历事件的显示和赋值都有严格的规范和语法。
时长的显示
"时长"是"时间长度"的简称,又被称为"时间间隔",表示一段时间的长度。显示为一个空格分隔的带有时间单位的时长序列。例如:
2h 30min
将序列中的每一段加起来就是最终的结果(150分钟)。注意,时长的显示不受系统本地化设置的影响,永远使用英文时间单位。
时长的赋值
systemd 在解析时长字符串(用于赋值)的时候,接受与时长的显示类似的语法,不同之处在于可以省略空格。可以理解的时间单位如下:
usec, us, µs
(微秒)msec, ms
(毫秒)seconds, second, sec, s
(秒)minutes, minute, min, m
(分钟)hours, hour, hr, h
(小时)days, day, d
(天)weeks, week, w
(星期)months, month, M
(月)[=30.44天]years, year, y
(年)[=365.25天]
如果没有指定时间单位,一般默认为秒,但是偶尔也有例外。此外,在某些场合还可以接受纳秒单位("ns
", "nsec
")。注意,时长的赋值不受系统本地化设置的影响,必须只能使用英文时间单位,不可使用例如"小时/分钟/秒"之类的非英文时间单位。
下面是一些有效的时长字符串实例:
2 h 2hours 48hr 1y 12month 55s500ms 300ms20s 5day
出于测试和验证目的,可以使用systemd-analyze(1)的 timespan 命令规范化给定的时长字符串。
时间戳的显示
时间戳表示的是一个独一无二的时间点,systemd 会按照本地时区格式化之后显示,例如:
Fri 2012-11-23 23:02:15 CET
注意,时间戳的显示不受系统本地化设置的影响,并且表示"星期"的部分永远使用英文三字母缩写。
有时候,时间戳会以UTC时间(而非本地时间)显示,此时,将会明确显示 "UTC
" 时区标记。
有时候,时间戳会以微秒精度显示,此时,表示"秒"的部分将会以带十进制小数的方式显示更精确的亚秒级时间。
时间戳的赋值
systemd 在解析时间戳字符串(用于赋值)的时候,接受与时间戳的显示类似的语法。不同之处在于:(1)尾部的"时区"部分,要么必须省略、要么必须丝毫不差的设为"UTC
"三个大写字母、要么必须设为一个符合IANA格式的时区。省略时区表示使用本机时区、设为"UTC"则表示使用世界统一时间,使用 timedatectl list-timezones 命令(参见timedatectl(1) 手册)可以按照IANA格式列出所有时区。强烈建议使用"UTC"时区以保持最佳的兼容性(主要是为了避免夏令时/冬令时造成的麻烦)。(2)头部的"星期"部分可以省略(强烈建议省略)。如果一定要指定这部分,那么必须使用英文三字母缩写(例如"Wed")或英文全称(例如"Wednesday"),大小写无所谓,但是不得使用任何非英文表示法。(3)"年-月-日"与"时:分:秒"两部分,可以省略二者之一,但是不可全部省略。若省略前者,则表示使用当前日期,若省略后者则表示使用"00:00:00"。(4)"时:分:秒"部分,可以只省略":秒",相当于使用":00"。(5)"年-月-日"部分,其中的"年"可以省略为2位数字表示,相当于"20xx"(强烈反对此种用法)。
如果指定的"星期"与"年-月-日"(即使此部分已被省略)与实际不相符,那么该时间戳将被视为无效。
除了接受上述语法之外,还可以使用一些时间戳关键字:"now
" 表示当前时间;"today
","yesterday
", "tomorrow
"分别表示今天/昨天/明天的零点(00:00:00)。
除了接受上述语法之外,还可以使用一些相对时间表示法:给一个时长(见上文)加上"+
" 前缀或者 "left
" 后缀(注意有空格),表示以当前时间为基准向未来前进指定的时长;给一个时长(见上文)加上"-
" 前缀或者 "ago
" 后缀(注意有空格),表示以当前时间为基准向过去倒退指定的时长;
最后,给一个时长(见上文)加上 "@
"前缀表示相对于UNIX时间原点(1970-01-01 00:00:00 UTC)之后多长时间。
假定当前时间为北京时间[UTC+8] 2012-11-23 18:15:22 ,系统时区 TZ=PRC (中华人民共和国的通用时区)。下面是一些时间戳实例及其标准化形式:
Fri 2012-11-23 11:12:13 → Fri 2012-11-23 11:12:132012-11-23 11:12:13 → Fri 2012-11-23 11:12:13 2012-11-23 11:12:13 UTC → Fri 2012-11-23 19:12:13 2012-11-23 → Fri 2012-11-23 00:00:00 12-11-23 → Fri 2012-11-23 00:00:00 11:12:13 → Fri 2012-11-23 11:12:13 11:12 → Fri 2012-11-23 11:12:00 now → Fri 2012-11-23 18:15:22 today → Fri 2012-11-23 00:00:00 today UTC → Fri 2012-11-23 16:00:00 yesterday → Fri 2012-11-22 00:00:00 tomorrow → Fri 2012-11-24 00:00:00 tomorrow Pacific/Auckland → Thu 2012-11-23 19:00:00 +3h30min → Fri 2012-11-23 21:45:22 -5s → Fri 2012-11-23 18:15:17 11min ago → Fri 2012-11-23 18:04:22 @1395716396 → Tue 2014-03-25 03:59:56
注意,不能将其他不同时区的系统所显示的时间戳直接用于赋值。因为无法识别UTC与本地时区之外的时间戳,所以其他系统所显示的时间戳可能会被错误的解析(除非那个系统的时区正好是"UTC
")。
如果想以更高的微秒精度表示时间戳,"秒"部分可以用带十进制小数的方式表示更精确的亚秒级时间。例如:
2014-03-25 03:59:56.654563
有时候,systemd 还可能显示相对时间戳(相对于当前时间或命令的调用时间),例如:
2 months 5 days ago
注意,systemd 显示的相对时间戳可以直接用于赋值(也就是可以被正确解析)。
日历事件
所谓"日历事件"是指可以同时表达多个时间戳的一种特殊的表达式,可以把它想象成一种专用于时间戳的正则表达式。其语法是基于前述绝对时间戳语法的一种扩展。例如:
Thu,Fri 2012-*-1,5 11:12:13
表示:2012年任意月份的1号或5号且为周三或周五的日子的11点12分13秒
"星期"部分是可选的。若指定,则必须使用英文三字母缩写(例如"Wed")或英文全称(例如"Wednesday"),大小写无关。可以使用 ",
" 依次列出多个日子,也可以使用 "..
" 表示一个范围,还可以将多个范围( "..
" )用 ",
" 依次列出。
对于"年-月-日"与"时:分:秒"两部分中的每个子部分,都可以:使用 "*
" 表示匹配任意值、使用 ",
" 依次列出多个值、使用 "/整数" 后缀表示以此整数为间隔不断向后重复跳跃(例如在表示分钟的部分"3/10"等价于"3,13,23,33,43,53")、使用 "..
" 表示一个范围。最后,还可以用逗号(,)依次列出多个重复(/)与范围(..)。
在日期部分还可以使用 "~
" 表示一个月中的"倒数第几天"。例如 "*-02~03
" 表示"2月的倒数第3天", "Mon *-05~07/1
"表示"5月的最后一个星期一"。
注意,"秒"部分比较特殊,可以使用十进制小数以表示更高的精度(最多六位小数),例如"3.33/10.05"等价于"3.33,13.38,23.43,33.48,43.53,53.58"。
若省略了"年-月-日"则等价于当前日期;若省略了"时:分:秒"则等价于"00:00:00";若省略了":秒"则等价于":00"
"时区"部分遵守与时间戳一样的规则,要么必须省略、要么必须丝毫不差的设为"UTC
"三个大写字母、要么必须设为一个符合IANA格式的时区。省略时区表示使用本机时区,为了保持最佳的兼容性,强烈建议使用"UTC"时区(世界统一时间)。
下面这些左侧的特殊表达式可以用作右侧的标准化形式的缩写:
minutely → *-*-* *:*:00hourly → *-*-* *:00:00 daily → *-*-* 00:00:00 monthly → *-*-01 00:00:00weekly → Mon *-*-* 00:00:00yearly → *-01-01 00:00:00 quarterly → *-01,04,07,10-01 00:00:00 semiannually → *-01,07-01 00:00:00
下面是一些日历事件的实例及其标准化形式:
Sat,Thu,Mon..Wed,Sat..Sun → Mon..Thu,Sat,Sun *-*-* 00:00:00Mon,Sun 12-*-* 2,1:23 → Mon,Sun 2012-*-* 01,02:23:00 Wed *-1 → Wed *-*-01 00:00:00 Wed..Wed,Wed *-1 → Wed *-*-01 00:00:00 Wed, 17:48 → Wed *-*-* 17:48:00 Wed..Sat,Tue 12-10-15 1:2:3 → Tue..Sat 2012-10-15 01:02:03 *-*-7 0:0:0 → *-*-07 00:00:00 10-15 → *-10-15 00:00:00 monday *-12-* 17:00 → Mon *-12-* 17:00:00 Mon,Fri *-*-3,1,2 *:30:45 → Mon,Fri *-*-01,02,03 *:30:45 12,14,13,12:20,10,30 → *-*-* 12,13,14:10,20,30:00 12..14:10,20,30 → *-*-* 12..14:10,20,30:00 mon,fri *-1/2-1,3 *:30:45 → Mon,Fri *-01/2-01,03 *:30:45 03-05 08:05:40 → *-03-05 08:05:40 08:05:40 → *-*-* 08:05:40 05:40 → *-*-* 05:40:00 Sat,Sun 12-05 08:05:40 → Sat,Sun *-12-05 08:05:40 Sat,Sun 08:05:40 → Sat,Sun *-*-* 08:05:40 2003-03-05 05:40 → 2003-03-05 05:40:00 05:40:23.4200004/3.1700005 → *-*-* 05:40:23.420000/3.170001 2003-02..04-05 → 2003-02..04-05 00:00:00 2003-03-05 05:40 UTC → 2003-03-05 05:40:00 UTC 2003-03-05 → 2003-03-05 00:00:00 03-05 → *-03-05 00:00:00 hourly → *-*-* *:00:00 daily → *-*-* 00:00:00 daily UTC → *-*-* 00:00:00 UTC monthly → *-*-01 00:00:00 weekly → Mon *-*-* 00:00:00weekly Pacific/Auckland → Mon *-*-* 00:00:00 Pacific/Auckland yearly → *-01-01 00:00:00 annually → *-01-01 00:00:00 *:2/3 → *-*-* *:02/3:00
定时器单元会使用日历事件,详见systemd.timer(5)手册。
出于测试和验证目的,可以使用systemd-analyze(1)的 calendar 命令规范化给定的日历事件。此工具还会计算出给定日历事件的下一个过期时间。
参见
systemd(1), journalctl(1), systemd.timer(5), systemd.unit(5), systemd.directives(7), systemd-analyze(1)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论