[转帖]Linux小技巧:获取前一天日期、前一个月日期

linux,技巧,获取,前一天,日期,一个月 · 浏览次数 : 0

小编点评

**Linux 前一天日期获取方法** **1. 使用 `date` 命令** * `date +"%Y%m%d"`:获取当前日期的格式为 YYYY-MM-DD。 * `date -d '1 day ago'`:获取昨天日期的格式为 YYYY-MM-DD。 * `date -d '2 days ago'`:获取前天日期的格式为 YYYY-MM-DD。 * `date -d '-1 day ago'`:获取前一天日期的格式为 YYYY-MM-DD。 * `date -d '+1 month ago'`:获取上个月日期的格式为 YYYY-MM-DD。 * `date -d '-2 month ago'`:获取上個月日期的格式为 YYYY-MM-DD。 * `date -d '+1 year ago'`:获取当年日期的格式为 YYYY-MM-DD。 **2. 使用 `-d` 命令选项** * `date -d "1 month ago"`:获取上個月日期。 * `date -d "2 months ago"`:获取前個月日期。 * `date -d "-1 day"`:获取昨天日期。 * `date -d "-2 days"`:获取前天日期。 * `date -d "+1 month"`:获取下個月日期。 * `date -d "-1 month"`:获取上個月日期。 * `date -d "+1 year"`:获取当年日期。 **3. 使用 `os_name`变量** * `date -v -1d +%Y-%m-%d`:获取前一天的日期。 * `date -v +1d +%Y-%m-%d`:获取后一天的日期。 **4. 使用 `/bin/bash` 命令** * `pre_date=$(date +%Y-%m-%d --date='-1 day')`:获取 1 天前的日期。 * `pre_date=$(date -v -1d +%Y-%m-%d)`:获取 1 天前的日期。

正文

最近脚本需要获取Linux前一天时间格式,用于设置日志文件名,网上查了查资料,这里记录一下。

1.date命令

1.1 date命令使用格式

 date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]] 

说明 : date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 : 

1.2 时间方面 : 

% : 印出 
% %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 : 显示时区 

1.3 日期方面 

%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 为秒数 

1.4 其他

-d datestr : 显示 datestr 中所设定的时间 (非系统时间) 
--help : 显示辅助讯息 
-s datestr : 将系统时间设为 datestr 中所设定的时间 
-u : 显示目前的格林威治时间 
--version : 显示版本编号 

 

1.2 例如

使用date -d 选项:

   date  +"%Y%m%d" -d  "+n days"         今天的后n天日期  

显示当前日期是

DATE=`date +%Y%m%d`  +号后面是定义格式为年月日

显示前一天为

DATE1=`date -d '1 days ago' +%Y%m%d` 加-d参数可以设置与当前日期的计算时间,同样,前2天为'2 days ago',去掉ago则为当前日期之后多少天

 

2.Linux下

前一天的日期

date -d "1 day ago" +"%y%m%d"

前一个月的日期

date -d "1 month ago" +"%y%m%d"

类似的还有

date -d "-1 day ago 1 month ago" +"%y%m%d"

date -d "1 day ago -1 year ago 1 month ago" +"%y%m%d"

下面是SHELL的例子:

DAYDEL=`date -d "1 month ago" +%m%d`   //一个月前的日期

echo $DAYDEL

 

在Linux中可以通过date命令获取昨天、明天、上个月、下个月、上一年和下一年

  1. # 获取昨天
  2. date -d 'yesterday' # 或 date -d 'last day'
  3. # 获取明天
  4. date -d 'tomorrow' # 或 date -d 'next day'
  5. # 获取上个月
  6. date -d 'last month'
  7. # 获取下个月
  8. date -d 'next month'
  9. # 获取上一年
  10. date -d ’last year'
  11. # 获取下一年
  12. date -d 'next year'

 

此外你可以获取多天前,多天后,多个月前,多个月后,多年前或多年后

  1. # 三年前
  2. date -d '3 year ago'
  3. # 五年后
  4. date -d '-5 year ago'
  5. # 两天后
  6. date -d '-2 day ago'
  7. # 一个月前
  8. date -d '1 month ago'

 

3. MAC下

获取前一天的日期

date -v -1d +%Y-%m-%d

获取后一天的日期

date -v +1d +%Y-%m-%d

4.根据OS平台获取前一天的日期

  1. #!/bin/bash
  2. pre_date=0
  3. os_name=$(uname -s)
  4. if [[ "$os_name" == "Linux" ]]; then
  5. #statements
  6. pre_date=$(date +%Y-%m-%d --date='-1 day')
  7. elif [[ "$os_name" == "Darwin" ]]; then
  8. pre_date=$(date -v -1d +%Y-%m-%d)
  9. fi

参考

https://my.oschina.net/aiguozhe/blog/57835

https://www.jianshu.com/p/f750879120e4

https://blog.51cto.com/jerrybear/393097

 

 

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux23501 人正在系统学习中

与[转帖]Linux小技巧:获取前一天日期、前一个月日期相似的内容:

[转帖]Linux小技巧:获取前一天日期、前一个月日期

最近脚本需要获取Linux前一天时间格式,用于设置日志文件名,网上查了查资料,这里记录一下。 1.date命令 1.1 date命令使用格式 date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--s

[转帖]小技巧!如何用 systemtap 排查问题

https://www.modb.pro/db/79444 霸爷博客,干货满满。有两篇文章现在还记得,《Linux下如何知道文件被哪个进程写》[1]和《巧用Systemtap注入延迟模拟IO设备抖动》[2],周末突然想起来,发现能看懂了:) 本文虽然说是小技巧,可是难度一点也不低 ^_^ 什么是 s

[转帖]060-轻量级基于curl的seafile上传脚本

https://anjia0532.github.io/2021/04/07/seafile-client-curl/ 这是坚持技术写作计划(含翻译)的第 60 篇,定个小目标 999,每周最少 2 篇。 本文主要讲解利用 bash 脚本在 linux 通过命令行上传文件到 seafile 服务器

[转帖]Linux小知识:sudo su和su的区别

https://www.cnblogs.com/jiading/p/11717388.html su是申请切换root用户,需要申请root用户密码。有些Linux发行版,例如ubuntu,默认没有设置root用户的密码,所以需要我们先使用sudo passwd root设置root用户密码。 而s

[转帖]linux将大目录等分切割成多个小目录

https://www.jianshu.com/p/6f9e6743a1dc 需求:有一个目录存放了数十万个文件,现在需要将这个目录上传,如果整个目录上传,中间因为某些故障断开连接了,可能又要从头开始 这时就需要将目录切割成多个小目录,分批次上传,一个简单的 shell 脚本即可实现 思路很简单:遍

[转帖]linux将大目录等分切割成多个小目录

https://www.jianshu.com/p/6f9e6743a1dc 需求:有一个目录存放了数十万个文件,现在需要将这个目录上传,如果整个目录上传,中间因为某些故障断开连接了,可能又要从头开始 这时就需要将目录切割成多个小目录,分批次上传,一个简单的 shell 脚本即可实现 思路很简单:遍

[转帖]Linux中的Grep命令(在文件中查找文本)

[日期:2020-05-14] 来源:Linux公社 作者:醉落红尘 [字体:大 中 小] grep命令是(global regular expression print,全局正则表达式输出)的缩写,它是Linux中功能最强大且最常用的命令之一。 grep在一个或多个输入文件中搜索与给定模式匹配的行

[转帖]linux sysbench (一): CPU性能测试详解

http://t.zoukankan.com/fzxiaomange-p-sysbench-cpu.html 网上sysbench教材众多,但没有一篇中文教材对cpu测试参数和结果进行详解。本文旨在能够让读者对sysbench的cpu有一定了解。 小慢哥的原创文章,欢迎转载 1.sysbench基础

[转帖]linux中top命令显示不全怎么解决

https://www.yisu.com/zixun/697775.html 这篇“linux中top命令显示不全怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linux中to

[转帖]Linux中split大文件分割和cat合并文件详解

https://www.yingsoo.com/news/servers/70195.html 当需要将较大的数据上传到服务器,或从服务器下载较大的日志文件时,往往会因为网络或其它原因而导致传输中断而不得不重新传输。这种情况下,可以先将大文件分割成小文件后分批传输,传完后再合并文件。 1. 分割文件