【shell】用date求相对时间的注意事项

项目场景:

以目前时间作为起点时刻,求前的一个小时,前两个小时和前八个小时。


问题描述

由下面代码可以看到,当前时间是2023050810,前一个小时pre_1_hour应该为2023050809,前两个小时pre_2_hour应该为2023050808,前八个小时pre_8_hour分别出现应该为2023050802,但打印出来结果与正确情况并不相符合。

[wqf@b1i10 ~]$ time_tag=$(date +"%Y%m%d%H")
[wqf@b1i10 ~]$ pre_1_hour=$(date -d "${time_tag} 1 hour ago"  +"%Y%m%d%H")
[wqf@b1i10 ~]$ pre_2_hour=$(date -d "${time_tag} 2 hours ago"  +"%Y%m%d%H")
[wqf@b1i10 ~]$ pre_8_hour=$(date -d "${time_tag} 8 hours ago"  +"%Y%m%d%H")
[wqf@b1i10 ~]$ echo $time_tag,$pre_1_hour,$pre_2_hour,$pre_8_hour
2023050810,202305080923,202305080922,202305080916

原因分析:

用 date 的输出格式控制实现,但“月日年”和“时分秒”必须分开处理,否则会无法识别。例如:2022-10-30 20:12:59 或者 20221030 20:12:59。

注意:
1,“月日年”和“时分秒”用空格分割;
2,年月日作为整体,格式十分灵活,可以随意写。但时分秒必须用冒号”:”分开,否则无法识别。


解决方案:

方法1:time_tag设置为标准时间格式%Y-%m-%d %HH:%MM:%SS,例如2023-05-08 10:20:14

[wqf@b1i10 ~]$ time_tag=$(date +"%F %T")
[wqf@b1i10 ~]$ cur_hour=$(expr substr "$time_tag" 9 2) 
[wqf@b1i10 ~]$ pre_1_hour=$(date -d "${time_tag} 1 hour ago"  +"%Y%m%d%H")
[wqf@b1i10 ~]$ pre_2_hour=$(date -d "${time_tag} 2 hours ago"  +"%Y%m%d%H")
[wqf@b1i10 ~]$ pre_8_hour=$(date -d "${time_tag} 8 hours ago"  +"%Y%m%d%H")
[wqf@b1i10 ~]$ echo $time_tag,$pre_1_hour,$pre_2_hour,$pre_8_hour
2023-05-08 10:20:14,2023050809,2023050808,2023050802

方法2:time_tag设置为标准时间格式%Y%m%d %HH,例如20230508 10

[wqf@b1i10 ~]$ time_tag=$(date +"%Y%m%d %H")
[wqf@b1i10 ~]$ pre_1_hour=$(date -d "${time_tag} 1 hour ago"  +"%Y%m%d%H")
[wqf@b1i10 ~]$ pre_2_hour=$(date -d "${time_tag} 2 hours ago"  +"%Y%m%d%H")
[wqf@b1i10 ~]$ pre_8_hour=$(date -d "${time_tag} 8 hours ago"  +"%Y%m%d%H")
[wqf@b1i10 ~]$ echo $time_tag,$pre_1_hour,$pre_2_hour,$pre_8_hour
20230508 10,2023050809,2023050808,2023050802
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值