日期命令:date
经常学习记录。前段时间用date -R命令修改commit日期,现在了解一下Linux中的这个命令。date常用于以给定的格式显示当前时间,或设置系统日期。
git commit --amend --date="$(date -R)"
1、命令可选选项
下面了解一下date命令的用法,--help显示帮助文档。
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
1.1、主选参数
可选参数有下面几个:
-d, --date=STRING 显示由 STRING 描述的时间,而不是“现在”
-f, --file=DATEFILE 类似--date; DATEFILE 的每一行解析一次日期
-I[FMT], --iso-8601[=FMT] 以 ISO 8601 格式输出日期/时间。
-R, --rfc-2822 以 RFC 2822 格式输出日期和时间。
--rfc-3339=FMT 以 RFC 3339 格式输出日期/时间。
-r, --reference=FILE 显示FILE的最后修改时间
-s, --set=STRING 设置由 STRING 描述的时间
-u, --utc, --universal 打印或设置协调世界时 (UTC)
--help 显示此帮助并退出
--version 输出版本信息并退出
1.2、日期格式参数
FORMAT控制日期时间显示格式,必须以+开头。 全部参数如下:
%% %
%a 区域设置的缩写工作日名称(例如,Sun)
%A 区域设置的完整工作日名称(例如,星期日)
%b 语言环境的缩写月份名称(例如,Jan)
%B 语言环境的完整月份名称(例如,一月)
%c 语言环境的日期和时间(例如,2005 年 3 月 3 日星期四 23:05:25)
%C 世纪; 同%Y类似,除了最后两位数字(e.g., 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 locale 相当于 AM 或 PM; 如果不知道则为空白
%P 同%p,但小写
%r 语言环境的 12 小时时钟时间(例如,晚上 11:11:04)
%R 24 小时制小时和分钟; 与 %H:%M 相同
%s 自 1970-01-01 00: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)
%Z 字母时区缩写(例如 EDT)
默认情况下,日期用零填充数字字段。以下可选标志可以跟在“%”之后:
- (连字符)不要填充字段
_ (下划线)用空格填充
0 (零)用零填充
^ 如果可能,请使用大写
# 如果可能,使用相反的情况
2、date命令实践
看的再多不如实践一次,详细的文档说明不如一个示例来的清晰。用几下date命令:
①通过date命令提取日期中的年份,日期为-d参数后面输入的STRING解析而来
$ date -d "20220628" +%Y
2022
②新建一个文件data.txt,内容如下
20210506
20210502
20210504
20210505
20210508
利用命令就可以从文件中逐行读取,并转换成日期
$ date -f data.txt
2021年05月 6日 0:00:00
2021年05月 2日 0:00:00
2021年05月 5日 0:00:00
2021年05月 4日 0:00:00
2021年05月 8日 0:00:00
③将日期转换成毫秒数,从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数。之前转换毫秒时间用的是在线工具:时间戳(Unix timestamp)转换。
$ date +%s
1623059106
④再将秒数转换成日期
$ date --date="@1623059106"
2021年06月 7日 17:45:06
⑤直接输入date命令显示当前时间(格式可调):
$ date
Tue Jun 8 23:59:18 2021
$ date -R
Sat, 04 Dec 2021 08:52:24 +0800
参考文档:
date: Print or set system date and time
gnu/software/coreutils/date