11181

56 分钟

#Bash 的 date 命令

date [OPTION]... [+FORMAT]

功能

查看或设置日期和时间。

类型

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

参数

  • 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
%gISO 周的年份的最后两位数字(参见 %G
%GISO 周的年份(参见 %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)
%R24 小时制的小时与分钟,等同于 %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)
%VISO 周数(以星期一为每周第一天,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 位的年份前添加 +
^使用大写
#使用相反的大小写

#示例

查看时间

$ 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

设置时间

$ 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/13

更新于 2025/11/13