Linux date命令 日期格式化与计算
参考资料
- 8.4.7 dateコマンド(システムの日付と時刻を表示する)
- 【Linux】dateコマンドで日付フォーマットの変更及び日付計算の方法
- date コマンド
目录
- 一. 基本语法
- 1.1 -d 选项
- 1.2 格式化
- 二. 年月日格式化
- 三. 日计算
- 3.1 一天之前
- 3.2 一天之后
- 四. 月计算
- 4.1 两个月前的月初
- 4.2 两个月后的月初
- 4.3 指定月份的最后一天
- 4.4 指定月份下个月的最后一天
- 4.5 指定月份的上个月的月末
- 4.6 指定月份的上上个月的月末
- 五. 周计算
- 5.1 获取指定日期是周几
- 5.2 指定日期在当年度是第几个周
- 5.3 当前日期的下个周一
- 5.4 下个周的今天
- 六. 小案例
- 6.1 输出指定期间内的所有日期
- 6.2 输出指定期间后100天的所有日期
一. 基本语法
1.1 -d 选项
- 用于显示或处理指定的日期和时间字符串
- 可以将输入的日期字符串转换为不同的格式,也可以用于日期计算。
1.2 格式化
⏹基本用法
格式 | 说明 |
---|---|
%Y | 西历4位年(1970〜) |
%y | 西历2位年(00〜99) |
%m | 月(01〜12) |
%-m | 月(1〜12) |
%b | 月份名的简略显示(Jan~Dec) |
%B | 月份名(January 〜 December) |
%d | 日(01〜31) |
%-d | 日(1〜31) |
%H | 时(24小时形式、00〜23) |
%-H | 时(24小时形式、0〜23) |
%I | 时(12小时形式、01〜12) |
%-I | 时(12小时形式、1〜12) |
%M | 分(00〜59) |
%S | 秒(00〜59) |
%a | 星期的简略名称(Sun, Mon, Tue, Wed, Thu, Fri, Sat) |
%A | 星期名称(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday) |
%u | 星期数字(1:周一 〜 7:周日) |
⏹其他用法
格式 | 说明 |
---|---|
%D | %m/%d/%y 的简写形式 ⇒ 09/06/24 |
%F | %Y-%m-%d 的简写形式 ⇒ 2024-09-06 |
%R | %H:%M 的简写形式 ⇒ 20:23 |
%T | %H:%M:%S 的简写形式 ⇒ 20:25:54 |
二. 年月日格式化
# ⏹YYYY-mm-dd
date "+%F"
# 2024-09-06
# ⏹mm/dd/YY
date "+%D"
09/06/24
# ⏹YYYY/mm/dd HH:MM:SS
date "+%Y/%m/%d %H:%M:%S"
# 2024/09/06 20:46:09
三. 日计算
3.1 一天之前
date '+%Y-%m-%d' -d 'yesterday'
date '+%Y%m%d' -d '1 day ago'
date '+%Y%m%d' -d '-1 days'
# 20240905
3.2 一天之后
date '+%Y-%m-%d' -d '1 day'
# 2024-09-07
date '+%Y%m%d' -d 'tomorrow'
# 20240907
四. 月计算
4.1 两个月前的月初
month
和months
的这两种形式都可以。
date '+%Y-%m-01' -d '-2 months'
# 2024-07-01
date '+%Y%m01' -d '2 month ago'
# 20240701
4.2 两个月后的月初
date '+%Y-%m-01' -d '2 months'
# 2024-11-01
4.3 指定月份的最后一天
- 指定月份的月初 + 1个月,变为下个月的月初
- 然后取前一天,变为指定月份的月末
my_month='06'
date '+%Y%m%d' -d "2024${my_month}01 +1 month -1 day"
# 20240630
4.4 指定月份下个月的最后一天
my_month='06'
date '+%Y%m%d' -d "2024${my_month}01 +2 month -1 day"
# 20240731
4.5 指定月份的上个月的月末
my_month='06'
date '+%Y/%m/%d' -d "2024/${my_month}/01 -1 day"
# 2024/05/31
4.6 指定月份的上上个月的月末
my_month='06'
date '+%Y%m%d' -d "2024/${my_month}/01 -1 month -1 day"
# 20240430
五. 周计算
5.1 获取指定日期是周几
%A
:星期名称
date -d "2024-09-01" +%A
# Sunday
%u
:星期数字
date -d "2024-09-04" +%u
# 3
5.2 指定日期在当年度是第几个周
%U
:表示周号,从每年的第一个周日开始计算。
date -d "2024-09-01" +%U
# 35
5.3 当前日期的下个周一
date '+%Y-%m-%d' -d 'next Monday'
# 2024-09-09
5.4 下个周的今天
date '+%Y-%m-%d' -d 'next week'
date '+%Y-%m-%d' -d '1 week'
# 2024-09-13
六. 小案例
6.1 输出指定期间内的所有日期
⏹输出2016-10-01 到 2016-12-31 范围内的所有日期
my_day="2016-10-01"
while [[ "${my_day}" < "2017-01-01" ]]; do
echo $my_day
my_day=$(date +%F -d "$my_day 1 day")
done
# 2016-10-01
# 2016-10-02
# 2016-10-03
# 2016-10-04
# 2016-10-05
# 2016-10-06
# 2016-10-07
# 。。。省略。。。
6.2 输出指定期间后100天的所有日期
for day_num in $(seq 0 100); do
echo $(date -d "2020/04/01 + $day_num days" +%Y/%m/%d)
done
# 2020/04/01
# 2020/04/02
# 2020/04/03
# 2020/04/04
# 2020/04/05
# 2020/04/06
# 。。。省略。。。