怎样通过shell获取年月日

2020年1月2日 | 分类: 【技术】

【需求】

需求:转换给定时间的格式

ORIGINAL="Jul  1 21:29" 
date "+%G-%m-%d %H:%M:%S" -d "$ORIGINAL"

输出:

2020-07-01 21:29:00

直接转换:

date +%b/%d/%G -d "2020-01-01"

输出:

Jan/01/2020

需求:显示目前的格林威治时间

date -u

输出:

Thu Jan  2 05:44:28 UTC 2020

需求:日期之间间隔的天数

expr '(' $(date +%s -d "2020-01-31") - $(date +%s -d "2020-01-01") ')' / 86400

输出:

30

需求:日期加减指定间隔单位

增加36小时:

a=`date +%Y-%m-%d`
b=`date +%Y-%m-%d -d "$a +36 hours"`

10天前:

date -d "$a -10 days"

需求:以指定格式显示文件最后更改时间

date "+%Y-%m-%d %H:%M:%S" -r test.txt

输出:

2019-12-31 00:15:09

需求:给定的日期究竟是星期几

并得到相对于当前日期的相对日期。

date -d "nov 22" 

输出:

Sun Nov 22 00:00:00 CST 2020

需求:获取月份,单数个位数月份补足0

date +%m

输出:

01

需求:获取月份,单数个位数月份不加0

参考:https://www.unix.com/shell-programming-and-scripting/84298-single-digit-day-month-date.html
参考:https://www.unix.com/shell-programming-and-scripting/97052-month-single-digit.html

当不希望出现无意义的 0 时(比如说 1999/03/07),则能在标记中插入 – 符号。

把月中无意义的 0 给去掉:

date +%-m

输出:

1

把时分秒中无意义的 0 给去掉:

date +%-H:%-M:%-S

输出:

6:7:8

需求:获得当天的日期

date +%Y-%m-%d

输出:

2020-01-01

需求:将当前日期赋值给DATE变量

DATE=$(date +%Y%m%d)
echo $DATE

输出:

20200102

需求:显示时间后跳行,再显示日期

date +%T%n%D

输出:

13:36:27
01/02/20

需求:显示月份和日期

date +%B-%d

输出:

January02

需求:ntp时间同步:

linux系统下默认安装了ntp服务,手动进行ntp同步如下

ntpdate ntp1.nl.net 

输出:

2 Jan 13:42:24 ntpdate[28082]: adjust time server 193.79.237.14 offset -0.020147 sec

只有取得权限者(比如说 root)才能设定系统时间。 当你以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。

需求:使用今天之前或者往后的日期,这时可以使用date的 -d参数

获取明天的日期:

date -d next-day +%Y%m%d

获取昨天的日期:

date -d last-day +%Y%m%d

获取上个月的年和月:

date -d last-month +%Y%m

获取下个月的年和月:

date -d next-month +%Y%m

获取明年的年份:

date -d next-year +%Y

【语法】

参考:https://www.cnblogs.com/mfryf/archive/2012/03/23/2413362.html
参考:https://www.cnblogs.com/OliverQin/p/5865656.html

基本语法:

名称 : date
使用权限 : 所有使用者
使用方式 : date [-u] [-d datestr] [-s datestr] [–utc] [–universal] [–date=datestr] [–set=datestr] [–help] [–version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 : date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :

时间方面:

% : 印出
% %n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区

日期方面:

%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期和时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)

若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],

其中:
MM 为月份
DD 为日
hh 为小时
mm 为分钟
CC 为年份前两位数字
YY 为年份后两位数字
ss 为秒数