【Linux运维】查询指定日期的上月

Linux 相关文档,希望互相学习,共同进步

风123456789~-CSDN博客


1.实验背景

最近发现,某些时候的最后一天,脚本中的查询的年月就不生效了,导致有时候就没有完成加载任务。排查原因后发现是脚本中的取上月的命令有点bug,没有取到上月。

本文总结常用的linux取日期的用法:

1)查看当前日期 && 按格式查看日期

2)几种常用方式显示上月

3)解决常用方式显示上月的bug

2. 实验

2.1 常用date 命令

1) 当前日期

命令:date

date +%Y%m%d

说明:查询当前时间

结果截图:

2)指定日期

命令:date -d 2025-04-01

date -d '2025-04-01'

date -d "2025-04-01"

说明:显示指定日期

结果截图:


或者:

命令:date -d 20250401

date -d '20250401'

date -d "20250401"

说明:显示指定日期

结果截图:


命令:

bash 复制代码
DATE=$(date +%Y%m%d)
echo $DATE

说明:显示指定日期

结果截图:

2.2 显示上月 date

1)last month 方式

命令:date -d "last month"

date -d 'last month'

说明:取当前日期的上月

结果截图:

2) -1 month 方式

命令:date -d "-1 month"

date -d '-1 month'

说明:取当前日期的上月

结果截图:

3)1 month ago 方式

命令:date -d "1 month ago" "+%Y-%m-%d"

说明:取当前日期的上月

结果截图:

2.3 按指定格式显示上月 date

命令:date -d "last month" +%Y-%m

date -d "last month" +%Y-%m-%d

说明:取当前日期的上月,且按格式展示

结果截图:

2.4 显示指定日期的上月 date

命令:date -d "2025-04-23 last month"

date -d "2025-04-01 last month"

date -d '2025-04-01 last month'

说明:取指定日期的上月

结果截图:

2.5 按格式显示指定日期的上月 date

命令: date -d '2025-04-01 last month' +%Y-%m-%d

date -d '2025-04-01 last month' '+%Y-%m-%d'

date -d '2025-04-01 last month' "+%Y-%m-%d"

说明:取指定日期的上月

结果截图:

3.bug 它出现了

1) last month 方式取上月的bug 出现了

实验如下:

命令:

date -d '2025-02-28 last month' "+%Y-%m-%d"

date -d '2025-04-30 last month' "+%Y-%m-%d"

date -d '2025-03-31 last month' "+%Y-%m-%d"

date -d '2025-03-30 last month' "+%Y-%m-%d"

date -d '2025-03-29 last month' "+%Y-%m-%d"

date -d '2025-05-31 last month' "+%Y-%m-%d"

说明:取指定日期的上月。此时发现,因为2025年2月只有28号,取3月31日的上月时,返回的结果不是2月,而是3月3日;3月29日的上月返回是3月1日,不是2月。

结果截图:

2)-1 month 方式取上月,bug依然存在

实验如下:

命令:

date -d '2025-05-31 -1 month' "+%Y-%m-%d"

date -d '2025-05-31 -1 month' +%Y-%m-%d

date -d '20250531 -1 month' "+%Y-%m-%d"

说明:取指定日期的上月。此时发现,-1month 方式依然无法返回正确的上月。

结果截图:

3)1 month ago 方式取上月,bug依然存在

实验如下:

命令: date -d "20250531 1 month ago" "+%Y-%m-%d"

说明:取指定日期的上月

结果截图:

4)解决方式:当月第一天 上月

想到用当月第一天减1天,得到上月应该是最准确的。

验证:发现第一天取上月没有问题,可行

bash 复制代码
命令:
date -d "20250501 -1 month" "+%Y-%m-%d"

date -d "20250301 -1 month" "+%Y-%m-%d"

date -d "20241231 -1 month" "+%Y-%m-%d"

date -d "20241201 -1 month" "+%Y-%m-%d"

结果截图:

实验: 步骤1 当月第一天

命令:

date +%Y-%m-01

date -d "$(date +%Y-%m-01)" +"%Y-%m-%d"

date -d "$(date +%Y-%m-01)"

date -d $(date +%Y-%m-01)

说明:取当月的第一天。

结果截图:

实验:步骤2 当月第一天的上月(最终结果)

命令:date -d "$(date +%Y-%m-01) last month"

date -d "$(date +%Y-%m-01) last month" %Y-%m

date -d "$(date +%Y%m01) last month" +%Y-%m

说明:取当月的第一天 的上月。

结果截图:

至此,实验ok

当然也可以用,当月第一天 减1天,得到上月

命令:date -d "$(date +%Y%m01) -1 day" +%Y-%m

date -d "$(date +%Y%m01) 1 day ago" +%Y-%m

date -d "$(date +%Y%m01) 1 day " +%Y-%m-%d

date -d "$(date +%Y%m01) -1 day " +%Y-%m-%d

说明:取当月的第一天 减1天。

结果截图:


附录:其他说明

1)显示中文:

export LANG=zh_CN.UTF-8

2)日期前几天/月/年、后几天/月/年

bash 复制代码
获取当前日期 1 天后的日期:
DATE_TMP=$(date -d "${DATE} 1 days" "+%Y%m%d")

获取当前日期 1 天前的日期:
DATE_TMP=$(date -d "${DATE} 1 days ago" "+%Y%m%d")

获取这个日期 N 月后的日期:
DATE_TMP=$(date -d "${DATE} N month" "+%Y%m%d")

获取这个日期 N 月前的日期:
DATE_TMP=$(date -d "${DATE} N month ago" "+%Y%m%d")

获取这个日期 N 年后的日期:
DATE_TMP=$(date -d "${DATE} N year" "+%Y%m%d")

获取这个日期 N 年前的日期:
DATE_TMP=$(date -d "${DATE} N year ago" "+%Y%m%d")

Linux运维--相关知识****

【Linux】cp -r 命令实验-CSDN博客

【Linux】按时间抽取附件_linux 根据时间截取文件-CSDN博客

【Linux实验】拆分文件命令_linux 拆分文件-CSDN博客

【Linux专栏】rsync 同步文件时自动创建目录_rsync 自动创建目录-CSDN博客

【Linux专栏】find命令+同步 实验-CSDN博客

【Linux运维】服务器信息查询_运维脚本 查看系统信息-CSDN博客

【Linux运维】非root用户的单向免密登录_linux免密登陆 非root账户-CSDN博客

【Linux专栏】Oracle的listagg、Linux的scp脚本 验证-CSDN博客

【Linux】实验:mkdir 命令 、 tee 命令-CSDN博客

项目管理--相关知识

项目管理-项目绩效域1/2-CSDN博客

项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-CSDN博客

项目管理-项目绩效域2/2_绩效域 团不策划-CSDN博客

高项-案例分析万能答案(作业分享)-CSDN博客

项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-CSDN博客

项目管理-配置管理与变更-CSDN博客

项目管理-项目管理科学基础-CSDN博客

项目管理-高级项目管理-CSDN博客

项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-CSDN博客


Oracle其他文档,希望互相学习,共同进步

Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-CSDN博客

oracle 跟踪文件--审计日志_oracle审计日志-CSDN博客

ORA-12899报错,遇到数据表某字段长度奇怪现象:"Oracle字符型,长度50"但length查却没有50_varchar(50) oracle 超出截断-CSDN博客

EXP-00091: Exporting questionable statistics.解决方案-CSDN博客

Oracle 更换监听端口-CSDN博客

相关推荐
曦夜日长3 分钟前
Linux系统篇,进程概念(三):进程状态详解、僵尸进程与孤儿进程的深度解析、Slab机制的了解
linux·运维·服务器
liulilittle11 分钟前
为什么采用全局管理缓存及状态:麻将客户端状态管理
服务器·网络·游戏·客户端·异步·mahjong·麻将
wdfk_prog12 分钟前
VMware Ubuntu 虚拟机从 124 GB 压缩到 33 GB
运维·缓存·docker·容器
FlightYe13 分钟前
音视频修炼之编码器(一):AVC、HEVC编码器内部
android·linux·c++·音视频
云栖梦泽18 分钟前
网络设备驱动(1)
linux·arm开发·嵌入式硬件
2601_9663771326 分钟前
等保2.0最新标准新增安全数据处理要求后怎么办?等保一体机数据安全模块来助力
运维·网络·安全·等保一体机
2601_9639067832 分钟前
桌面自动化工具|零代码录制自动化,无需联网本地离线用
运维·自动化
海宇AI33 分钟前
零信任架构实战:基于海宇公安二要素认证即时版构建自动化灵活用工准入网关
运维·人工智能·架构·自动化
Jia ming1 小时前
从打补丁到一行配置:PREEMPT_RT 主线化之后,实时内核到底该怎么配?
linux
杨云龙UP1 小时前
MySQL Host is blocked because of many connection errors 导致 JDBC 连接失败排查与解决
linux·运维·网络·数据库·sql·mysql·登录失败