网站解析需要多长时间,西安网站优化招聘网,联客易网站建设制作,邯郸市教育考试院目录
内容来源#xff1a;
【GUN】【date】指令介绍
【busybox】【date】指令介绍
【linux】【date】指令介绍
使用示例#xff1a;
打印前天的日期:
打印三个月零一天后的日期:
打印当年圣诞节的年数:
打印当前的全月名称和月的日期:
要打印一个没有前导零的日期
【GUN】【date】指令介绍
【busybox】【date】指令介绍
【linux】【date】指令介绍
使用示例
打印前天的日期:
打印三个月零一天后的日期:
打印当年圣诞节的年数:
打印当前的全月名称和月的日期:
要打印一个没有前导零的日期您可以使用(GNU扩展) - 标志来完全抑制填充:
在设置系统时钟时以许多非gnu版本的date所需的格式打印当前日期和时间:
将系统时钟拨快两分钟:
要以Internet RFC 5322格式打印日期
如果未在date字符串中指定时区信息则date在解释字符串时使用计算机的时区概念。
通常秒数会忽略闰秒但有些系统是例外。
常用组合指令
指令不常用/组合用法还需继续挖掘 内容来源 GUN Coreutils - GNU core utilities busybox v1.36.1 【busybox记录】【shell指令】基于的Busybox的版本和下载方式-CSDN博客
【GUN】【date】指令介绍
date:打印或设置系统日期和时间
简介:
date [option]... [format]
date [-u|--utc|--universal] [ MMDDhhmm[[CC]YY][.ss] ]
date 命令用来显示日期和时间。使用 --set (-s)选项或使用 ‘MMDDhhmm[[CC]YY][.ss]’ 设置日期和时间。
调用不带格式参数的date等同于使用依赖于LC_TIME区域设置类别的默认格式调用date。
在默认的C语言环境中此格式为 ‘%a %b %e %H:%M:%S %Z %Y’ 因此输出看起来像‘Thu Jul 9 17:00:00 EDT 2020’.
通常情况下date使用TZ环境变量指定的时区规则如果没有设置TZ则使用系统默认规则。参见GNU C库参考手册中的“用TZ指定时区”一节。
退出状态为0表示成功非0表示失败。
1 指定日期输出格式
如果给定一个以 开头的参数date将以该参数定义的格式打印当前日期和时间(或由 --date选项指定的日期和时间见下文)这与strftime函数的格式类似。
除了以 % 开头的转换说明符外格式字符串中的字符将被原样打印。下面描述了转换说明符。1.1 时间转换说明符
与时间相关的日期转换说明符。
‘%H’ 小时( 00 … 23 )
‘%I’ 小时( 01 … 12 )
‘%k’ 小时空格填充( 0 … 23 );相当于‘%_H’。这是一个GNU扩展。
‘%l’ 小时空格填充( 1 … 12 );相当于‘%_I’。这是一个GNU扩展。
‘%M’ 分钟( 00 … 59 )
‘%N’ 纳秒( 000000000 … 999999999 )。这是一个GNU扩展。
‘%p’ 区域设置相当于 AM 或 PM ;在许多地方空白。中午被当作“PM”午夜被当作“AM”。
‘%P’ 类似‘%p’只是小写。这是一个GNU扩展。
‘%r’ 区域设置的12小时时钟时间(例如 11:11:04 PM )
‘%R’ 24小时小时和分钟。与 ‘%H:%M’ 相同。
‘%s’ 从 Epoch 开始的秒数即从UTC时间1970-01-01 00:00开始。除非支持闰秒否则不计算闰秒。参见[%s-examples]第202页的示例。这是一个GNU扩展。
‘%S’ 秒( 00 … 60 )。如果支持闰秒这个值可能是 60 。
‘%T’ 24小时小时、分、秒。与 ‘%H:%M:%S’ 相同。
‘%X’ 区域设置的时间表示(例如 23:13:48 )
‘%z’ 四位数字时区例如 -0600 或 0530 如果无法确定时区则为 -0000 。该值使用TZ环境变量指定的时区规则反映适合当前时间的数字时区。如果时区的数字偏移量为零并且其缩写以 - 开头则无法确定时区。时间(以及可选的时区规则)可以被 --date选项覆盖。
‘%:z’ 带‘:’的数字时区例如 -06:00 或 05:30 )如果无法确定时区则使用 -00:00 。这是一个GNU扩展。
‘%::z’ 使用‘:’(例如 -06:00:00 或 05:30:00 )的数字时区到最近的秒如果无法确定时区则使用 -00:00:00 。这是一个GNU扩展。
‘%:::z’ 带有‘:’的数字时区使用最低必要精度(例如 -06 05:30 或 -04:56:02 )如果无法确定时区则使用 -00 。这是一个GNU扩展。
‘%Z’ 按字母顺序排列的时区缩写(例如‘EDT’)如果无法确定时区则不显示。请参阅%z’了解如何确定它。1.2 日期转换说明符
与日期相关的日期转换说明符。
‘%a’ 区域设置的工作日缩写名(例如“Sun”)
‘%A’ 域设置的完整工作日名称可变长度(例如 Sunday )
‘%b’ 域设置的缩写月名(例如 Jan )
‘%B’ 域设置的完整月份名称可变长度(例如 January )
‘%c’ 域设置的日期和时间(例如‘Thu Mar 3 23:05:25 2020’)
‘%C’ 世纪。这类似于‘%Y’只是省略了最后两位数字。例如如果‘%Y’为“2019”则为“20”;如果‘%Y’为“-001”则为“-0”。通常至少有两个字符但也可能更多。
‘%d’ 月中的第几天(例如 01 )
‘%D’ 日期;与‘%m/%d/%y’相同
‘%e’ 月份的日期空格填充;与‘%_d’相同
‘%F’ ISO 8601 格式的“%F”完整日期;类似于‘%4Y-%m-%d’除了任何标志或字段宽度覆盖 和(减去6后) 4 。对于日期格式来说这是一个很好的选择因为它是标准的并且在年份在0000范围内的通常情况下易于排序9999.
‘%g’ 年对应于ISO周数但不包含世纪(范围 00 到 99 )。它具有与‘%Y’相同的格式和值除了如果ISO周数(参见‘%V’)属于前一年或下一年则使用该年份。
‘%G’ 与ISO周数对应的“%G”年。它具有与 %Y 相同的格式和值除了如果ISO周数(参见‘%V’)属于上一年或下一年则使用该年份。通常只有在也使用‘%V’时才有用;例如格式‘%G-%m-%d’可能是错误的因为它将ISO周数年与传统的月和日结合在一起。
‘%h’ 与‘%b’相同
‘%j’ 年月日( 001 … 366 )
‘%m’ 月( 01 … 12 )
‘%q’ 季度( 1 … 4 )
‘%u’ 星期几( 1 . . 7 )其中 1 对应星期一
‘%U’ 一年中的周数星期日作为一周的第一天(“00”…“53”)。新年中第一个星期天之前的日子属于第0周。
‘%V’ ISO周数即一年中的周数星期一为一周的第一天( 01 … 53 )。如果包含1月1日的一周在新的一年中有四天或更多天则将其视为第一周;否则为前一年第53周下一周为第1周。(参见ISO 8601标准。)
‘%w’ 星期几( 0 . . 6 )其中0对应星期日
‘%W’ 年的周数星期一作为一周的第一天( 00 … 53 )。新年中第一个星期一之前的日子属于第0周。
‘%x’ 区域设置的日期表示(例如 12/31/99 )
‘%y’ 年份的后两位数字( 00 … 99 )
‘%Y’ 这通常至少是四个字符但也可能更多。年份“0000”在年份“0001”之前年份“-001”在年份“0000”之前。1.3 文字转换说明符
生成字面值字符串的日期转换说明符。
‘%%’ 是字面量%
‘%n’ 是换行符
‘%t’ 是一个水平制表符1.4填充和其他标志
除非另有指定否则date通常用零填充数字字段因此例如数字月份总是作为两位数字输出。大多数数值字段都填充在左侧。
但是由于纳秒通常在 ‘%s.%-N’ 等格式的小数点之后使用因此在右侧填充了纳秒。此外由于Epoch没有自然宽度因此不会填充秒。
以下可选标志可以出现在‘%’之后:
‘-’ (连字符)不要填充字段;如果输出用于人类消费则有用。这是一个GNU扩展。作为一种特殊情况‘%-N’只输出足够的尾随数字以不丢失信息假设时间戳的分辨率与当前硬件时钟相同。例如如果硬件时钟分辨率为1微秒则 ‘%s.%-N’ 输出类似‘1640890100.395710’。
‘_’ (下划线)填充空格;如果您需要输出固定数量的字符则非常有用但是零太分散注意力了。这是一个GNU扩展。
‘0’ 用零填充即使转换说明符通常会用空格填充。
‘’ 键盘上有零比如 0 。此外如果年份超过9999或字段宽度超过4则在年份前加“”;类似地如果任何世纪数超过99或字段宽度超过2则在其前面加上 。它支持ISO 8601格式的日期在遥远的未来;例如命令 date --date12019-02-25 %13F 输出字符串‘012019-02-25’。
‘^’ 如果可能请使用大写字符。这是一个GNU扩展。
‘#’ 如果可能的话使用相反的大小写字符。一个通常是大写的字段变成了小写反之亦然。这是一个GNU扩展。
下面是一些填充的例子:
date %d/%m -d Feb 1
⇒ 01/02
date %-d/%-m -d Feb 1
⇒ 1/2
date %_d/%_m -d Feb 1
⇒ 1/ 2
您可以选择将字段宽度指定为十进制数(如果存在则在任何标志之后)。
如果字段输出的自然大小少于指定的字符数则结果通常被右写调整并填充到给定的大小。例如‘%9B’在宽度为9的字段中打印右侧调整后的月份名称。纳秒被左调整并被截断或填充到字段宽度。
可选修饰符可以遵循可选标志和宽度规范。修饰语是:
‘E’ 使用区域设置的日期和时间的替代表示。此修饰符适用于 %c 、 %c 、 %x 、 %x 、 %y 和 %y 转换说明符。例如在日本语言环境中 %Ex 可能产生基于日本皇帝统治的日期格式。
‘O’ 使用区域设置的备用数字符号表示数字。此修饰符仅适用于数字转换说明符。
如果格式支持该修饰符但没有可用的替代表示则忽略它。
POSIX仅为 %C %F %G 和 %Y (都没有修饰符)指定标志和字段宽度的行为并且要求当且仅当字段宽度也存在时才存在标志。标志、字段宽度和修饰符的其他组合是GNU扩展。
2 设置时间
您必须具有适当的权限才能设置系统时钟。要使更改在重新启动时保持不变可能需要从系统时钟更新硬件时钟这在系统上可能不会自动发生。
要设置时钟可以使用 --set (-s)选项(参见第21.1.3节[日期选项]第199页)。
要设置时钟而不使用GNU扩展您可以给date一个形式为‘MMDDhhmm[[CC]YY][.ss]’其中每个两个字母组成部分代表两个数字其含义如下:
MM month
DD day within month
hh hour
mm minute
CC first two digits of year (optional)
YY last two digits of year (optional)
ss second (optional)--date和 --set选项不能与上述格式的参数一起使用。--universal选项可以与这样的参数一起使用以指示指定的日期和时间相对于世界时而不是相对于本地时区。
3 日期选项
程序接受以下选项。请参见第2章[常用选项]第2页。除了-u之外这些选项都是POSIX的GNU扩展。
指定要显示日期的所有选项都是互斥的。即:--date, --file, --reference, --resolution.
‘-d datestr’
‘--datedatestr’显示 datestr 中指定的日期和时间而不是当前日期和时间。Datestr几乎可以是任何通用格式。它可以包含月份名称、时区、 ‘am’ ‘pm’, ‘yesterday 等。例如--date2020-07-21 14:19:13.489392193 0530指定2020年7月21日下午2:19:13 (UTC以东5小时30分钟)后489392193纳秒的瞬间。日期必须是独立于语言环境的格式。例如下面的 LC_TIMEC 需要在许多地区打印正确的日期:date -d $(LC_TIMEC date)参见第29章[日期输入格式]第245页。
‘--debug’ 注释已解析的日期显示有效时区并警告可能的误用。
‘-f datefile’
‘--filedatefile’使用 -d 解析datefile中的每一行并显示结果日期和时间。如果datefile为 - 则使用标准输入。当您有许多日期需要处理时这很有用因为多次启动日期可执行文件的系统开销可能相当大。
‘-I[timespec]’
‘--iso-8601[timespec]’使用ISO 8601格式显示日期‘%Y-%m-%d’。参数timespec指定要包含的时间附加项的数量。它可以是下列情况之一:‘auto’ 只打印日期。如果省略timespec这是默认值。这类似于%Y-%m-%d的格式。‘hours’ 也可以打印时间和时区。这类似于%Y-%m-%dT%H%:z的格式。‘minutes’ 也可以打印minutes。这类似于%Y-%m-%dT%H:% m %:z的格式。‘seconds’ 也可以打印秒。这类似于%Y-%m-%dT%H:% m:%S%:z的格式。‘ns’ 也 可以打印纳秒。这类似于%Y-%m-%dT%H:% m:%S%N%:z的格式。无论当前语言环境如何这种格式始终适合作为 --date (-d)和 --file (-f)选项的输入。
‘-r file’
‘--referencefile’显示上次修改文件的日期和时间而不是当前的日期和时间。
‘--resolution’显示时间戳分辨率而不是时间。按日期输出的当前时钟时间戳是时间戳分辨率的整数倍。使用此选项格式默认为‘%s.%N’。例如时钟分辨率为1毫秒输出为:0.001000000
‘-R’
‘--rfc-email’使用格式 ‘%a, %d %b %Y %H:%M:%S %z’ 显示日期和时间在C语言环境中求值因此缩写始终是英语。例如:Mon, 09 Jul 2020 17:00:00 -0400此格式符合Internet rfc 5322 (https://datatracker.ietf.org/doc/rfc5322/)2822 (https://datatracker.ietf.org/doc/rfc2822/)和822 (https://datatracker.ietf.org/doc/rfc822/)是当前和以前的互联网电子邮件标准。为了与旧版本的date兼容 --rfc-2822和 --rfc-822是 --rfc-email.的别名。
‘--rfc-3339timespec’使用Internet RFC 3339 (https://datatracker.ietf.org/doc/rfc3339/)指定的格式显示日期。这类似于 --iso-8601只不过是用空格而不是 T 分隔日期和时间用句号而不是逗号分隔秒和次秒。无论当前语言环境如何这种格式始终适合作为 --date (-d)和 --file (-f)选项的输入。参数timespec指定要包含多少时间。它可以是下列情况之一:‘date’ 只打印完整日期例如‘2020-07-21’。这类似于格式‘%Y-%m-%d’.‘seconds’ 打印以空格分隔的完整日期和时间例如‘2020-07-21 04:30:3705:30’. 输出以数字时间偏移结束;这里的“05:30”表示当地时间比UTC晚5小时30分钟。这类似于格式‘%Y-%m-%d %H:%M:%S%:z’‘ns’ 类似秒但也可以打印纳秒例如‘2020-07-21 04:30:37.99845856505:30’.这就像格式的 ‘%Y-%m-%d %H:%M:%S.%N%:z’。
‘-s datestr’
‘--setdatestr’将日期和时间设置为datestr。参见上面的d。参见第21.1.2节[设置时间]第199页。
‘-u’
‘--utc’
‘--universal’通过将TZ环境变量设置为字符串 UTC0 来操作通用时间。UTC是协调世界时(Coordinated Universal Time)的缩写成立于1960年。由于历史原因世界时间通常被称为“格林威治标准时间”(GMT)。通常情况下系统忽略闰秒从而实现近似UTC而不是真正的UTC。 【busybox】【date】指令介绍
[rootlocalhost bin]# ./date --help
BusyBox v1.36.1 (2024-04-16 11:16:28 EDT) multi-call binary.Usage: date [OPTIONS] [FMT] [[-s] TIME]Display time (using FMT), or set time-u Work in UTC (dont convert to local time)[-s] TIME Set time to TIME-d TIME Display TIME, not now-D FMT FMT (strptime format) for -s/-d TIME conversion-r FILE Display last modification time of FILE-R Output RFC-2822 date-I[SPEC] Output ISO-8601 dateSPECdate (default), hours, minutes, seconds or nsRecognized TIME formats:seconds_since_1970hh:mm[:ss][YYYY.]MM.DD-hh:mm[:ss]YYYY-MM-DD hh:mm[:ss][[[[[YY]YY]MM]DD]hh]mm[.ss]date TIME form accepts MMDDhhmm[[YY]YY][.ss] instead 【linux】【date】指令介绍
[rootlocalhost bin]# date --help
用法date [选项]... [格式]或date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.必选参数对长短选项同时适用。-d, --dateSTRING display time described by STRING, not now--debug annotate the parsed date,and warn about questionable usage to stderr-f, --fileDATEFILE like --date; once for each line of DATEFILE-I[FMT], --iso-8601[FMT] output date/time in ISO 8601 format.FMTdate for date only (the default),hours, minutes, seconds, or nsfor date and time to the indicated precision.Example: 2006-08-14T02:34:56-06:00-R, --rfc-email output date and time in RFC 5322 format.Example: Mon, 14 Aug 2006 02:34:56 -0600--rfc-3339FMT output date/time in RFC 3339 format.FMTdate, seconds, or nsfor date and time to the indicated precision.Example: 2006-08-14 02:34:56-06:00-r, --referenceFILE display the last modification time of FILE-s, --setSTRING set time described by STRING-u, --utc, --universal print or set Coordinated Universal Time (UTC)--help 显示此帮助信息并退出--version 显示版本信息并退出给定的格式FORMAT 控制着输出解释序列如下%% 一个文字的 %%a 当前locale 的星期名缩写(例如 日代表星期日)%A 当前locale 的星期名全称 (如星期日)%b 当前locale 的月名缩写 (如一代表一月)%B 当前locale 的月名全称 (如一月)%c 当前locale 的日期和时间 (如2005年3月3日 星期四 23:05:25)%C 世纪比如 %Y通常为省略当前年份的后两位数字(例如20)%d 按月计的日期(例如01)%D 按月计的日期等于%m/%d/%y%e 按月计的日期添加空格等于%_d%F 完整日期格式等价于 %Y-%m-%d%g ISO-8601 格式年份的最后两位 (参见%G)%G ISO-8601 格式年份 (参见%V)一般只和 %V 结合使用%h 等于%b%H 小时(00-23)%I 小时(00-12)%j 按年计的日期(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 locales equivalent of either AM or PM; blank if not known%P like %p, but lower case%q quarter of year (1..4)%r locales 12-hour clock time (e.g., 11:11:04 PM)%R 24-hour hour and minute; same as %H:%M%s seconds since 1970-01-01 00:00:00 UTC%S 秒(00-60)%t 输出制表符 Tab%T 时间等于%H:%M:%S%u 星期1 代表星期一%U 一年中的第几周以周日为每星期第一天(00-53)%V ISO-8601 格式规范下的一年中第几周以周一为每星期第一天(01-53)%w 一星期中的第几日(0-6)0 代表周一%W 一年中的第几周以周一为每星期第一天(00-53)%x 当前locale 下的日期描述 (如12/31/99)%X 当前locale 下的时间描述 (如23:13:48)%y 年份最后两位数位 (00-99)%Y 年份%z hhmm 数字时区(例如-0400)%:z hh:mm 数字时区(例如-04:00)%::z hh:mm:ss 数字时区(例如-04:00:00)%:::z 数字时区带有必要的精度 (例如-0405:30)%Z 按字母表排序的时区缩写 (例如EDT)默认情况下日期的数字区域以0 填充。
The following optional flags may follow %:- (hyphen) do not pad the field_ (underscore) pad with spaces0 (zero) pad with zeros^ use upper case if possible# use opposite case if possible在任何标记之后还允许一个可选的域宽度指定它是一个十进制数字。
作为一个可选的修饰声明它可以是E在可能的情况下使用本地环境关联的
表示方式或者是O在可能的情况下使用本地环境关联的数字符号。Examples:
Convert seconds since the epoch (1970-01-01 UTC) to a date$ date --date2147483647Show the time on the west coast of the US (use tzselect(1) to find TZ)$ TZAmerica/Los_Angeles dateShow the local time for 9AM next Friday on the west coast of the US$ date --dateTZAmerica/Los_Angeles 09:00 next FriGNU coreutils 在线帮助https://www.gnu.org/software/coreutils/
请向 http://translationproject.org/team/zh_CN.html 报告 date 的翻译错误
完整文档请见https://www.gnu.org/software/coreutils/date
或者在本地使用info (coreutils) date invocation 使用示例
打印前天的日期:
date --date2 days ago 打印三个月零一天后的日期:
date --date3 months 1 day 打印当年圣诞节的年数:
date --date25 Dec %j 打印当前的全月名称和月的日期:
date %B %d
但这可能不是您想要的因为对于一个月的前九天‘%d’扩展为一个填零的两位数字段例如‘date -d 1may %B %d’将打印‘May 01’。 要打印一个没有前导零的日期您可以使用(GNU扩展) - 标志来完全抑制填充:
date -d 1may %B %-d 在设置系统时钟时以许多非gnu版本的date所需的格式打印当前日期和时间:
date %m%d%H%M%Y.%S 将系统时钟拨快两分钟:
date --set2 minutes 要以Internet RFC 5322格式打印日期
date --rfc-email
输出
Tue, 09 Jul 2020 19:00:37 -0400 要将日期字符串转换为自Epoch (1970-01-01 00:00 UTC)以来的秒数使用带‘%s’格式的 --date选项。
这在按日期排序和/或绘图和/或比较数据时很有用。
下面的命令输出纪元后两分钟从Epoch到现在的秒数:
date --date1970-01-01 00:02:00 0000 %s
120 要将日期字符串从一个时区转换为另一个时区请在环境中指定‘TZfrom’并在——date选项中指定‘TZto’
TZAsia/Tokyo date --dateTZAmerica/New_York 2023-05-07 12:23
Mon May 8 01:23:00 JST 2023
如果未在date字符串中指定时区信息则date在解释字符串时使用计算机的时区概念。
例如如果你的计算机的时区是马萨诸塞州的剑桥它当时比UTC晚5小时(即18000秒):
# local time zone used
date --date1970-01-01 00:02:00 %s
18120 如果您正在排序或绘图日期数据您的原始日期值可能表示为自Epoch以来的秒。但很少有人会看到日期“1577836800”然后漫不经心地说:“哦这是英国格林威治2020年的第一秒。”
date --date2020-01-01 UTC %s
1577836800 另一种选择是使用 --utc (-u)选项。然后你可以从日期字符串中省略 UTC 。虽然这对 %s 和许多其他格式序列产生相同的结果但时区偏移量不同于零但对于 %z 等依赖于区域的格式会产生不同的结果。
date -u --date2020-07-21 %s
1595289600 要将如此庞大的秒数转换为更易读的形式可以使用如下命令:
date -d 1595289600 %F %T %z
2020-07-20 20:00:00 -0400 通常输出相对于utc的日期和时间会更好:
date -u -d 1595289600 %F %T %z
2020-07-21 00:00:00 0000 通常秒数会忽略闰秒但有些系统是例外。
因为闰秒是不可预测的所以在计数中包含闰秒的非典型系统上秒计数和未来时间戳之间的映射是不可靠的。
以下是两种系统如何处理2016年底的闰秒:
#典型的系统忽略闰秒:
date --date2016-12-31 23:59:59 0000 %s
1483228799
date --date2016-12-31 23:59:60 0000 %s
date:无效日期2016-12-31 23:59:60 0000
date --date2017-01-01 00:00:00 0000 %s
1483228800 #非典型系统计算闰秒:
date --date2016-12-31 23:59:59 0000 %s
1483228825
date --date2016-12-31 23:59:60 0000 %s
1483228826
date --date2017-01-01 00:00:00 0000 %s
1483228827 常用组合指令
NA
指令不常用/组合用法还需继续挖掘