date.1

DATE(1)

DATE(1)

FreeBSD General Commands Manual

DATE(1)

date

显示或设置日期和时间

date [-jnRu] [-r seconds | filename] [-v [+ | -]val [ymwdHMS]] ... [+output_fmt] date [-ju] [[[[[cc]yy]mm]dd]HH]MM[.ss] date [-jRu] -f input_fmt new_date [+output_fmt] date [-jnu] [-I[FMT]] [-f input_fmt] [-r ...] [-v ...] [new_date]

当不带参数调用时, date 实用程序显示当前日期和时间。 否则,根据指定的选项, date 将设置日期和时间或以用户定义的方式打印。

date 实用程序显示从内核时钟读取的日期和时间。 当用于设置日期和时间时,内核时钟和硬件时钟都会更新。

只有超级用户可以设置日期,如果系统安全级别(参见 securelevel(7)) 大于 1,则时间更改不得超过 1 秒。

选项如下:

-f

使用 input_fmt 作为格式字符串来解析提供的 new_date 而不是使用默认的 [[[[[cc]yy]mm]dd]HH]MM[.ss] 格式。 使用 strptime(3) 完成解析。

-I[FMT]

使用 ISO 8601 输出格式。 FMT 可以省略,在这种情况下,默认值为 ‘date’ 。 有效的 FMT 值为 ‘date 、’ ‘hours 、’ ‘minutes’ 和 ‘seconds’ 。 日期和时间被格式化为指定的精度。 当 FMT 为 ‘hours’ (或更精确的 ‘minutes’ 或 ‘seconds’ )时, ISO 8601 格式包括时区。

-j

不要尝试设置日期。 除了 -f 选项之外,这还允许您使用 + 标志将一种日期格式转换为另一种日期格式。 请注意, -f 格式字符串未指定的任何日期或时间组件都从当前时间获取它们的值。

-n

过时的标志,为了兼容性而接受和忽略。

-R

使用 RFC 2822 日期和时间输出格式。 这相当于使用 “%a, %d %b %Y %T %z” 作为 output_fmt 而 LC_TIME 设置为 “C” 语言环境。

-r seconds

打印以 seconds 表示的日期和时间,其中 seconds 是自 Epoch(00:00:00 UTC,1970 年 1 月 1 日;参见 time(3) )以来的秒数,可以指定为十进制、八进制或十六进制。

-r filename

打印最后一次修改 filename 的日期和时间。

-u

以 UTC (协调世界时)时间显示或设置日期。

-v

根据 val 调整(即取当前日期并显示调整结果;不实际设置日期)秒、分、时、月、日、星期、月或年。 如果 val 前面有加号或减号,则根据剩余字符串向前或向后调整日期,否则设置日期的相关部分。 使用这些标志可以根据需要多次调整日期。 标志按给定的顺序处理。

设置值时(而不是调整它们),秒在 0-59 范围内,分钟在 0-59 范围内,小时在 0-23 范围内,月日在 1-31 范围内,工作日在在 0-6 范围内(周日至周六),月份在 1-12 范围内(1 月至 12 月),年份在 80-38 或 1980-2038 范围内。

如果 val 是数字,则必须使用 y, m, w, d, H, M 或 S 之一来指定要调整日期的哪一部分。

可以使用名称而不是数字来指定星期几或月份。 如果名称与加号(或减号)一起使用,则日期将向前(或向后)到与给定工作日或月份匹配的下一个(前一个)日期。 如果给定的星期几或月份与当前日期相同,则不会调整日期。

当日期调整为特定值或单位大于小时时,将忽略夏令时注意事项。 以小时或更少为单位的调整遵循夏令时。 因此,假设当前日期是 3 月 26 日 0:30,并且 DST 调整意味着时钟从 01:00 前进到 02:00,使用 -v +1H 会将日期调整为 3 月 26 日 2:30。 同样,如果日期是 10 月 29 日 0:30,并且 DST 调整意味着时钟从 02:00 回到 01:00,则需要使用 -v +3H 才能到达 10 月 29 日 2:30。

当日期调整为实际不存在的特定值时(例如欧洲/伦敦时区 2000 年 3 月 26 日,英国夏令时 1:30),日期将以一小时为单位静默向前调整,直到达到有效时间。 当日期调整为出现两次的特定值时(例如 2000 年 10 月 29 日 1:30),将设置生成的时区,以使日期与两次中较早的时间相匹配。

不可能将日期调整为无效的绝对日期,因此使用开关 -v 31d -v 12m 只会在一年中的五个月中失败。 因此,通常在设置日期之前设置月份;使用 -v 12m -v 31d 总是有效的。

按月调整日期本质上是模棱两可的,因为一个月是一个可变长度的单位,具体取决于当前日期。 这种日期调整以最直观的方式应用。 首先, date 试图保留月份中的日期。 如果由于目标月份比当前月份短而无法执行,则结果将是目标月份的最后一天。 例如,在 5 月 31 日使用 -v +1m 会将日期调整为 6 月 30 日,而在 1 月 30 日使用相同选项会将日期调整为 2 月的最后一天。 这种方法也被认为对 shell 脚本最有意义。 不过,请注意,以相同的月数来回可能会将您带到不同的日期。

有关详细信息,请参阅以下示例。

带有前导加号 (‘+’) 的操作数表示用户定义的格式字符串,该字符串指定显示日期和时间的格式。 格式字符串可以包含 strftime(3) 手册页中描述的任何转换规范,以及任何任意文本。 换行符 (‘’) 始终在格式字符串指定的字符之后输出。 默认显示的格式字符串是 “+%+” 。

如果操作数没有前导加号,则将其解释为用于设置系统当前日期和时间概念的值。 设置日期和时间的规范表示是:

cc

世纪(19 或 20)添加到缩写年份。

yy

缩写形式的年份(例如,1989 年为 89,2006 年为 06)。

mm

数字月份,从 1 到 12 的数字。

dd

日,从 1 到 31 的数字。

HH

小时,一个从 0 到 23 的数字。

MM

分钟,一个从 0 到 59 的数字。

ss

秒,从 0 到 60 的数字(59 加上潜在的闰秒)。

除会议记录外的所有内容都是可选的。

自动处理夏令时、标准时间、闰秒和闰年的时间更改。

以下环境变量会影响 date 的执行:

TZ

显示日期时使用的时区。 正常格式是相对于 /usr/share/zoneinfo 的路径名。 例如,命令 “TZ=America/Los_Angeles date” 显示加利福尼亚的当前时间。 有关详细信息,请参阅 environ(7) 。

/var/log/utx.log

日期重置和时间更改的记录

/var/log/messages

用户设置时间的记录

date 实用程序在成功时退出 0,如果无法设置日期,则退出 1,如果能够设置本地日期,但无法全局设置,则退出 2。

命令:

date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S"

将显示:

DATE: 1987-11-21 TIME: 13:36:16

在欧洲/伦敦时区,命令:

date -v1m -v+1y

将显示:

Sun Jan 4 04:15:24 GMT 1998

目前是 Mon Aug 4 04:15:24 BST 1997 。

命令:

date -v1d -v3m -v0y -v-1d

将显示 2000 年二月的最后一天:

Tue Feb 29 03:18:00 GMT 2000

命令也一样:

date -v3m -v30d -v0y -v-1m

因为没有像 2 月 30 日这样的日期。

命令:

date -v1d -v+1m -v-1d -v-fri

将显示该月的最后一个星期五:

Fri Aug 29 04:31:11 BST 1997

目前是 Mon Aug 4 04:31:11 BST 1997 。

命令:

date 8506131627

将日期设置为 “June 13, 1985, 4:27 PM 。

date "+%Y%m%d%H%M.%S"

可以在一台机器上打印出适合在另一台机器上设置的日期。 (“+%m%d%H%M%Y.%S” 用于 Linux 。)

命令:

date 1432

将时间设置为 2:32 PM, ,而不修改日期。

命令

TZ=America/Los_Angeles date -Iseconds -r 1533415339

将显示

2018-08-04T13:42:19-07:00

最后是命令:

date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

可用于解析 date 的输出并以 Epoch 时间表示。

-I 标志与 -R 或输出格式 (“+...”) 操作数组合是无效的。 如果发生这种情况, date 会打印: ‘multiple output formats specified’ 并以错误状态退出。

locale(1), gettimeofday(2), getutxent(3), strftime(3), strptime(3) R. Gusella and S. Zatti, TSP: The Time Synchronization Protocol for UNIX 4.3BSD.

date 实用程序预计与 IEEE Std 1003.2 (“POSIX.2”) 兼容。 -d, -f, -I, -j, -r, -t-v- 选项都是对标准的扩展。

-I 标志选择的格式与 ISO 8601 兼容。

date 命令出现在 Version 1 AT&T UNIX 中。

-I 标志是在 FreeBSD 12.0 中添加的。

August 25, 2020

FreeBSD 13.1-RELEASE

最后更新于

FreeBSD 中文社区