国际访客建议访问 Primers 编程伙伴 国际版站点 > Bash 教程 > date 以获得更好的体验。

# Bash 的 date 命令

date [OPTION]... [+FORMAT]

!subtitle:功能

查看或设置日期和时间。

!subtitle:类型

可执行文件(/usr/bin/date),属于 coreutils

!subtitle:参数

  • OPTION 选项:

    • -d, --date=STRING - 查看指定的日期,而不是现在

    • --debug - 打印解析过程

    • -f, --file=DATEFILE - 使用文件 DATEFILE 指定日期,每行一次,类似 -d 选项

    • -I[FMT], --iso-8601[=FMT] - 使用 ISO 8601 格式

    • --resolution - 查看时间戳的可用分辨率

    • -R, --rfc-email - 使用 RFC 5322 格式

    • --rfc-3339=FMT - 使用 RFC 3339 格式

    • -r, --reference=FILE - 查看文件 FILE 最后被修改的时间

    • -s, --set=STRING - 将时间设为字符串 STRING 表示的时间

    • -u, --utc, --universal - 查看或设置 UTC 时间;默认为本地时间

    • --help - 显示当前帮助

    • --version - 显示版本

# 格式

格式 含义
%% 字面值 %
%a 本地化的星期简称(例如:Sun)
%A 本地化的星期全称(例如:Sunday)
%b 本地化的月份简称(例如:Jan)
%B 本地化的月份全称(例如:January)
%c 本地化的日期与时间(例如:Thu Mar 3 23:05:25 2005)
%C 世纪(类似 %Y,但去掉最后两位数字,例如:20)
%d 月中的第几天(例如:01)
%D 日期,等同于 %m/%d/%y
%e 月中的第几天(空格填充),等同于 %_d
%F 完整日期,类似于 %Y-%m-%d
%g ISO 周的年份的最后两位数字(参见 %G
%G ISO 周的年份(参见 %V,通常与 %V 一起使用)
%h 等同于 %b
%H 小时(00..23)
%I 小时(01..12)
%j 一年中的第几天(001..366)
%k 小时(空格填充,0..23),等同于 %_H
%l 小时(空格填充,1..12),等同于 %_I
%m 月份(01..12)
%M 分钟(00..59)
%n 换行符
%N 纳秒(000000000..999999999)
%p 本地化的 AM 或 PM(若未知则为空)
%P %p 相同,但为小写形式
%q 一年中的季度(1..4)
%r 本地化的 12 小时时间(例如:11:11:04 PM)
%R 24 小时制的小时与分钟,等同于 %H:%M
%s 自纪元(1970-01-01 00:00 UTC)以来的秒数(时间戳)
%S 秒(00..60)
%t 制表符(tab)
%T 时间,等同于 %H:%M:%S
%u 星期几(1..7,1 表示星期一)
%U 一年中的周数(以星期日为每周第一天,00..53)
%V ISO 周数(以星期一为每周第一天,01..53)
%w 星期几(0..6,0 表示星期日)
%W 一年中的周数(以星期一为每周第一天,00..53)
%x 本地化的日期表示(例如:12/31/99)
%X 本地化的时间表示(例如:23:13:48)
%y 年份的最后两位数字(00..99)
%Y 完整年份
%z 数字形式的时区偏移 +hhmm(例如:-0400)
%:z 数字形式的时区偏移 +hh:mm(例如:-04:00)
%::z 数字形式的时区偏移 +hh:mm:ss(例如:-04:00:00)
%:::z 数字形式的时区偏移,带必要的冒号精度(例如:-04,+05:30)

默认情况下,数值字段会使用 0 进行填充,可以在 % 后添加以下标识修改此类行为:

标识 含义
- 不填充
_ 使用空格填充
0 使用 0 填充
+ 使用 0 填充,并在大于 4 位的年份前添加 +
^ 使用大写
# 使用相反的大小写

# 示例

!subtitle:查看时间

$ date
Thu Nov 13 11:33:44 AM UTC 2025
$ date +"%Y-%m-%d %H:%M:%S"             # 指定格式
2025-11-13 11:33:44
$ date -d @1763024722                   # 查看指定的时间戳
Thu Nov 13 09:05:22 AM UTC 2025
$ date -d "next Monday"                 # 查看下周一的时间
Mon Nov 17 12:00:00 AM UTC 2025
$ date -d "2025-12-25 +7 days"          # 查看 2025-12-25 的 7 天之后的日期
Thu Jan  1 12:00:00 AM UTC 2026

!subtitle:设置时间

$ sudo date -s "2012-12-21 08:30:00"
Fri Dec 21 08:30:00 AM UTC 2012

现代操作系统通常使用 NTP 时间同步服务,使用 date 命令设置时间后会立刻被 NTP 覆盖。

# 推荐阅读

# 手册

DATE(1)                          User Commands                         DATE(1)

NAME
       date - print or set the system date and time

SYNOPSIS
       date [OPTION]... [+FORMAT]
       date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

DESCRIPTION
       Display  date  and  time  in  the given FORMAT.  With -s, or with [MMD‐
       Dhhmm[[CC]YY][.ss]], set the date and time.

       Mandatory arguments to long options are  mandatory  for  short  options
       too.

       -d, --date=STRING
              display time described by STRING, not 'now'

       --debug
              annotate  the  parsed date, and warn about questionable usage to
              stderr

       -f, --file=DATEFILE
              like --date; once for each line of DATEFILE

       -I[FMT], --iso-8601[=FMT]
              output date/time in ISO 8601 format.  FMT='date' for  date  only
              (the  default),  'hours', 'minutes', 'seconds', or 'ns' for date
              and    time    to    the    indicated    precision.     Example:
              2006-08-14T02:34:56-06:00

       --resolution
              output   the   available   resolution   of  timestamps  Example:
              0.000000001

       -R, --rfc-email
              output date and time in RFC 5322 format.  Example: Mon,  14  Aug
              2006 02:34:56 -0600

       --rfc-3339=FMT
              output  date/time in RFC 3339 format.  FMT='date', 'seconds', or
              'ns' for date and time to  the  indicated  precision.   Example:
              2006-08-14 02:34:56-06:00

       -r, --reference=FILE
              display the last modification time of FILE

       -s, --set=STRING
              set time described by STRING

       -u, --utc, --universal
              print or set Coordinated Universal Time (UTC)

       --help display this help and exit

       --version
              output version information and exit

       All  options  that  specify the date to display are mutually exclusive.
       I.e.: --date, --file, --reference, --resolution.

       FORMAT controls the output.  Interpreted sequences are:

       %%     a literal %

       %a     locale's abbreviated weekday name (e.g., Sun)

       %A     locale's full weekday name (e.g., Sunday)

       %b     locale's abbreviated month name (e.g., Jan)

       %B     locale's full month name (e.g., January)

       %c     locale's date and time (e.g., Thu Mar  3 23:05:25 2005)

       %C     century; like %Y, except omit last two digits (e.g., 20)

       %d     day of month (e.g., 01)

       %D     date; same as %m/%d/%y

       %e     day of month, space padded; same as %_d

       %F     full date; like %+4Y-%m-%d

       %g     last two digits of year of ISO week number (see %G)

       %G     year of ISO week number (see %V); normally useful only with %V

       %h     same as %b

       %H     hour (00..23)

       %I     hour (01..12)

       %j     day of year (001..366)

       %k     hour, space padded ( 0..23); same as %_H

       %l     hour, space padded ( 1..12); same as %_I

       %m     month (01..12)

       %M     minute (00..59)

       %n     a newline

       %N     nanoseconds (000000000..999999999)

       %p     locale's equivalent of either AM or PM; blank if not known

       %P     like %p, but lower case

       %q     quarter of year (1..4)

       %r     locale's 12-hour clock time (e.g., 11:11:04 PM)

       %R     24-hour hour and minute; same as %H:%M

       %s     seconds since the Epoch (1970-01-01 00:00 UTC)

       %S     second (00..60)

       %t     a tab

       %T     time; same as %H:%M:%S

       %u     day of week (1..7); 1 is Monday

       %U     week number of year, with Sunday as first day of week (00..53)

       %V     ISO week number, with Monday as first day of week (01..53)

       %w     day of week (0..6); 0 is Sunday

       %W     week number of year, with Monday as first day of week (00..53)

       %x     locale's date representation (e.g., 12/31/99)

       %X     locale's time representation (e.g., 23:13:48)

       %y     last two digits of year (00..99)

       %Y     year

       %z     +hhmm numeric time zone (e.g., -0400)

       %:z    +hh:mm numeric time zone (e.g., -04:00)

       %::z   +hh:mm:ss numeric time zone (e.g., -04:00:00)

       %:::z  numeric time zone with :  to  necessary  precision  (e.g.,  -04,
              +05:30)

       %Z     alphabetic time zone abbreviation (e.g., EDT)

       By  default,  date  pads numeric fields with zeroes.  The following op‐
       tional flags may follow '%':

       -      (hyphen) do not pad the field

       _      (underscore) pad with spaces

       0      (zero) pad with zeros

       +      pad with zeros, and put '+' before future years with >4 digits

       ^      use upper case if possible

       #      use opposite case if possible

       After any flags comes an optional field width,  as  a  decimal  number;
       then an optional modifier, which is either E to use the locale's alter‐
       nate  representations  if available, or O to use the locale's alternate
       numeric symbols if available.

EXAMPLES
       Convert seconds since the Epoch (1970-01-01 UTC) to a date

              $ date --date='@2147483647'

       Show the time on the west coast of the US (use tzselect(1) to find TZ)

              $ TZ='America/Los_Angeles' date

       Show the local time for 9AM next Friday on the west coast of the US

              $ date --date='TZ="America/Los_Angeles" 09:00 next Fri'

DATE STRING
       The --date=STRING is a mostly free format human  readable  date  string
       such  as  "Sun, 29 Feb 2004 16:21:42 -0800" or "2004-02-29 16:21:42" or
       even "next Thursday".  A date string may contain items indicating  cal‐
       endar  date,  time of day, time zone, day of week, relative time, rela‐
       tive date, and numbers.  An empty string indicates the beginning of the
       day.  The date string format is more complex than is easily  documented
       here but is fully described in the info documentation.

AUTHOR
       Written by David MacKenzie.

REPORTING BUGS
       GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
       Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT
       Copyright  ©  2023  Free Software Foundation, Inc.  License GPLv3+: GNU
       GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
       This is free software: you are free  to  change  and  redistribute  it.
       There is NO WARRANTY, to the extent permitted by law.

SEE ALSO
       Full documentation <https://www.gnu.org/software/coreutils/date>
       or available locally via: info '(coreutils) date invocation'

GNU coreutils 9.4                 April 2024                           DATE(1)
本文 更新于: 2025-11-27 09:38:14 创建于: 2025-11-27 09:38:14