shell(Linux)日期加减、格式转换

参考博客:脚本之家(Shell中关于时间和日期的函数总结)https://www.jb51.net/article/139920.htm

测试并打印(可直接运行):

#!/bin/bash

#日期的格式可自定义
now_time1=`date +"%Y%m%d %H:%M:%S"`;
now_time2=`date +"%y-%m-%d %H:%M:%S"`;
now_time3=$(date);
echo "当前时间:\n 1、${now_time1}; \n 2、${now_time2} \n 3、${now_time3}"

YYYYMMDD_4=`date +"%Y%m%d" -d "-4 days"`;
YYYYMMDD_20=`date -d "-20 days" +"%Y%m%d" `;
echo "日期加减:\n 1、获取4天前:${YYYYMMDD_4};\n 2、获取20天前:${YYYYMMDD_20}";

# %w表示星期,星期只有0~6,0表示周日
# %W表示周,这一年的第几周
now_week1=`date +"%w"`;
now_week2=`date -d "5 days" +"%w"`;
now_week3=`date +"%W"`;
now_week4=`date -d "${1}" +"%W"`;
echo "当前星期数:\n 1、今天是星期${now_week1} \n 2、5天后为星期${now_week2} \n 3、本周为这一年的第${now_week3}周 \n 4、日期${1}为第${now_week4}周";

#参数的输入格式一般为:YYYYMMDD、YYYY-MM-DD、YYYY/MM/DD
#违法格式:YYYY.MM.DD、YYYY~MM~DD
#若无未传参,默认为当天
now_date1=`date -d "1 day ${1}" +%Y.%m.%d`;
now_date2=`date -d "${1}" +%Y-%m-%d`;
echo "将日期参数${1}的格式进行改动:\n 1、${now_date1} \n 2、${now_date2}" 

now_d=`date +"%d"`;
now_d2=`date +"%D"`;
echo "日期%d、%D:\n 1、某一天:${now_d} \n 2、日期某一天:${now_d2}"

输出:

当前时间:
1、20201222 10:28:02;
2、20-12-22 10:28:02
3、Tue Dec 22 10:28:02 CST 2020
日期加减:
1、获取4天前:20201218;
2、获取20天前:20201202
当前星期数:
1、今天是星期2
2、5天后为星期0
3、本周为这一年的第51周
4、日期20200212为第06周
将日期参数20200212的格式进行改动:
1、2020.02.13
2、2020-02-12
日期%d、%D:
1、某一天:22
2、日期某一天:12/22/20

字符含义
%Y%m%d%Y%m%d分别表示年月日;其中%Y年份格式为YYYY,而%y为YY
%H%M%S%H%M%S分别表示时分秒;其中%M表示分钟,而%m表示月份
%d、%D%d表示天,例20号;而%D表示日期的某年某月某天,格式例12/18/20即2020年12月18日
$(date)原格式日期
% y年的最后两个数字( 1999则是99)
% Y年(例如:1970,1996等)
% m月(01…12)
% d一个月的第几天(01…31)
% D日期(mm/dd/yy)
% H小时(00…23)
% I小时(01…12)
% k小时(0…23)
% l小时(1…12)
% M分(00…59)
% s从1970年1月1日00:00:00到目前经历的秒数
% S秒(00…59)
% p显示出AM或PM
% r时间(hh:mm:ss AM或PM),12小时
% T时间(24小时制)(hh:mm:ss)
% X显示时间的格式(%H:%M:%S)
% Z时区 日期域
% a星期几的简称( Sun…Sat)
% A星期几的全称( Sunday…Saturday)
% b月的简称(Jan…Dec)
% B月的全称(January…December)
% c日期和时间( Mon Nov 8 14:12:46 CST 1999)
% h和%b选项相同
% j一年的第几天(001…366)
% w一个星期的第几天(0代表星期天)
% W一年的第几个星期(00…53,星期一为第一天)
% x显示日期的格式(mm/dd/yy)
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Shell脚本日期格式转换是指将日期从一种格式转换为另一种格式。在Shell脚本中,可以使用date命令来进行日期格式转换。例如,将日期从“2021-01-01”转换为“01/01/2021”可以使用以下命令: ``` date -d "2021-01-01" +"%m/%d/%Y" ``` 其中,“-d”选项指定要转换的日期,“+%m/%d/%Y”指定转换后的日期格式。 除了使用date命令,还可以使用其他工具如awk、sed等来进行日期格式转换。例如,将日期从“2021-01-01”转换为“20210101”可以使用以下命令: ``` echo "2021-01-01" | awk -F "-" '{print $1$2$3}' ``` 其中,“-F”选项指定分隔符为“-”,“{print $1$2$3}”指定输出第1、2、3个字段,即年、月、日,并将它们拼接起来。 ### 回答2: Shell脚本日期格式转换是一项非常基础的任务。在Shell编程中,我们通常需要对日期进行转换以便于将不同格式的日期进行比较、排序或者输出。下面我将介绍一些常用的日期格式转换技巧。 1.将日期从“YYYYMMDD”格式转换为“YYYY-MM-DD”格式 这是最基础、也是最常用的日期格式转换。在Shell脚本中,我们可以使用sed命令来实现这一转换。具体命令如下: date="20201231" echo $date | sed 's/\(....\)\(..\)\(..\)/\1-\2-\3/g' 以上命令的意思是将日期变量date中的前四个字符作为年份,接下来两个字符作为月份,再接下来的两个字符作为日期,然后按照“YYYY-MM-DD”格式输出。 2.将日期从“YYYY-MM-DD”格式转换为时间戳 在Shell脚本中,我们有时需要将日期转换为时间戳(即从1970年1月1日0时起经过的秒数)。这个转换也非常简单,只需要使用date命令加上“-d”选项即可,具体命令如下: date="2020-12-31" date -d "$date" +%s 以上命令中,“+%s”表示输出时间戳,可以根据需要添加不同的格式选项,如“%Y%m%d”表示输出“YYYYMMDD”格式的日期。 3.将时间戳转换为“YYYY-MM-DD”格式的日期 与上述转换相反,我们有时需要将时间戳转换为可读性更好的“YYYY-MM-DD”格式的日期。这个转换也可以使用date命令,具体命令如下: timestamp="1609372800" date -d "@$timestamp" "+%Y-%m-%d" 以上命令中,“@”表示所提供的参数为时间戳。可以根据需要添加不同的格式选项,如“%Y%m%d”表示输出“YYYYMMDD”格式的日期。 除了上述三种常用的日期格式转换,还有一些其他的转换技巧,在实际的Shell编程中应用较少。总体而言,日期Shell编程中非常重要的一个因素,掌握日期格式转换技巧能够为我们编写出更加高效、实用的脚本提供有力的支持。 ### 回答3: Shell脚本是一种常用的自动化脚本语言,在脚本编写中,日期处理是经常遇到的问题。在不同的场景下,需要转换不同格式的日期,而日期格式转换Shell脚本中的处理也有不同的方式。 首先,Shell脚本中可以使用date命令来获取当前的日期和时间,如下所示: ``` #!/bin/bash now=$(date +"%Y-%m-%d %H:%M:%S") echo "当前时间:$now" ``` 上面的代码中,date命令使用了+%Y-%m-%d %H:%M:%S来指定了日期时间输出的格式,%Y代表年份、%m代表月份、%d代表日期、%H代表小时、%M代表分钟、%S代表秒钟。运行上面的代码,可以输出当前的日期和时间,如下所示: ``` 当前时间:2022-01-01 12:00:00 ``` 除了获取当前日期和时间外,Shell脚本还可以将不同格式的日期互相转换。例如,将日期从“2022-01-01”转换成“20220101”的格式,可以使用下面的代码: ``` #!/bin/bash date_str="2022-01-01" new_date=$(echo $date_str | sed 's/-//g') echo "新日期:$new_date" ``` 上面的代码中,使用了sed命令将日期字符串中的“-”替换成空字符,从而实现了日期格式的转换。运行上面的代码,可以输出新的日期字符串“20220101”。 除此之外,Shell脚本还可以使用date命令将一个格式的日期转换成另一个格式的日期,例如: ``` #!/bin/bash date_str="2022-01-01" new_date=$(date -d "$date_str" +"%Y%m%d") echo "新日期:$new_date" ``` 上面的代码中,date命令使用-d参数来指定一个日期字符串,+%Y%m%d来指定输出的日期格式。运行上面的代码,可以输出新的日期字符串“20220101”。 无论是将日期字符串互相转换,还是使用date命令进行日期格式的转换,都需要了解不同日期格式之间的转换规则。同时,在进行日期处理时,也要注意时区的问题,以免因时区差异导致日期计算错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值