[转帖]Linux Shell:date日期时间操作

linux,shell,date,日期,时间,操作 · 浏览次数 : 0

小编点评

**日期操作命令总结:** | 命令 | 功能 | 示例 | |---|---|---| | `date` | 获取当前日期和时间 | `date` | | `date +%s` | 将日期格式化为字符串类型,保留10位时间戳 | `date +%s1629211600` | | `date +%Y-%m-%d` | 将日期格式化为字符串类型,保留年、月、日 | `date +%Y-%m-%d` | | `date +%Y-%m-%d %H:%M:%S` | 将日期和时间格式化为字符串类型,保留年、月、日、时、分、秒 | `date +%Y-%m-%d %H:%M:%S` | | `date -d 'yesterday'` | 获取昨天日期 | `date -d 'yesterday'` | | `date -d 'tomorrow'` | 获取明天日期 | `date -d 'tomorrow'` | | `date -d 'next day'` | 获取下一天日期 | `date -d 'next day'` | | `date -d '2 days ago'` | 获取两天前日期 | `date -d '2 days ago'` | | `date -d '1 hour ago'` | 获取一天前一小时的日期 | `date -d '1 hour ago'` | | `date -d '2 days +1 hour'` | 获取两天后一小时的日期 | `date -d '2 days +1 hour'` | | `date -d '1 day ago'` | 获取一天前一天的日期 | `date -d '1 day ago'` | | `date -d '1 minute ago'` | 获取1分钟前的一个日期 | `date -d '1 minute ago'` | | `date -d '2021-03-12't2='2021-03-18'` | 获取2021年3月12日至2021年3月18日的差值 | `date -d '2021-03-12't2='2021-03-18'` | | `date -d '2021-03-12' +1day'` | 获取2021年3月12日至2021年3月18日的间隔秒数 | `date -d '2021-03-12' +1day'` | | `date -d '2021-03-03 11:11:11 1 hour ago'` | 获取2021年3月3日11:11:11前一小时的日期 | `date -d '2021-03-03 11:11:11 1 hour ago'` |

正文

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

 

整理Linux Shell脚本中常用的日期操作,给予date命令,主要用法总结

  • 获得当前日期,时间戳,date,date '+%s'
  • 日期解析(字符串转日期,时间戳转日期)date -d
  • 日期格式化输出,date '+%'
  • 提取日期元素,date '+%'
  • 日期加减计算(求指定间隔的新日期,求两日期之差),date -d
  • 比较日期大小,字符串大小
  • 计算耗时,data '+%s'

获得当前日期,时间戳

直接使用date命令就可以得到当前时间日期,输出格式是CST格式

date
2021年 08月 17日 星期二 22:34:35 CST

获得当前日期的正常格式,比如时间日期型%Y-%m-%d $H:%M:%S,或者日期型%Y-%m-%d%Y%m%d,使用+日期格式实现格式化,date后面必须要有至少一个空格,如果日期格式存在空格需要用引号包起来

date '+%Y-%m-%d %H:%M:%S'
2021-08-17 22:49:57
date '+%Y-%m-%d'
2021-08-17
date '+%Y%m%d'
20210817
date +%Y%m%d
20210817

获得当前时间戳,使用+%s即可获得10位时间戳

date +%s
1629211600

日期解析(字符串转日期,时间戳转日期)

日期解析使用data -d命令,可以解析指定的字符串日期为CST格式时间

date -d '2021-06-18 13:13:13'
2021年 06月 18日 星期五 13:13:13 CST
date -d '2021-06-18'
2021年 06月 18日 星期五 00:00:00 CST
date -d '20210618'
2021年 06月 18日 星期五 00:00:00 CST

date -d接受字符串描述,可以使用以下格式语句将10位时间戳转化为日期格式

date -d @1629535772
2021年 08月 21日 星期六 16:49:32 CST

进一步将时间戳转化为指定格式日期

date -d @1629535772 '+%Y-%m-%d %H:%M:%S'
2021-08-21 16:49:32
# 日期型转年月
 date -d '2021-05-18' '+%Y-%m'
2021-05
# 日期型转时间日期型
date -d '2021-05-18' '+%Y-%m-%d %H:%M:%S'
2021-05-18 00:00:00

日期格式化输出

日期格式化输出使用类似于' +%Y-%m-%d'的格式

# 将时间日期型转化为日期型
date -d '2021-05-18 13:12:19' '+%Y-%m-%d'
2021-05-18

提取日期元素

提取年,月,日,时,分,秒

date +%Y  # 2021
date +%m  # 08
date +%d  # 21
date +%H  # 17
date +%M  # 16
date +%S  # 07
# 提取指定时间的年
date -d '2018-05-13' '+%Y'  # 2018

日期加减计算

(1)求日期间隔下的新日期

以当下时间为基准,可以使用字符串描述求明天,昨天,几小时,几天之前的日期

date -d 'yesterday'
2021年 08月 20日 星期五 17:24:14 CST
date -d 'tomorrow'
2021年 08月 22日 星期日 17:24:54 CST
date -d 'next day'
2021年 08月 22日 星期日 17:24:54 CST
date -d '2 days ago'
2021年 08月 19日 星期四 17:24:24 CST
date -d '1 hour ago'
2021年 08月 21日 星期六 16:24:33 CST

也可以对指定的日期进行间隔计算

# 求指定日期的之前1个小时
date -d '2021-03-03 11:11:11 1 hour ago' 
2021年 03月 03日 星期三 10:11:11 CST
# 求指定日期之前1天的时间
date -d '2021-01-01 -1day'
# 求指定日期之后1天的时间
date -d '2021-01-01 +1day'
2021年 01月 02日 星期六 00:00:00 CST
# 求指定日期之前1分钟
date -d '2021-01-01 1 minute ago'
2020年 12月 31日 星期四 23:59:00 CST

(2)求两个日期之间的差

先转化为时间戳,求间隔的秒数,然后再求对应的时分天

# 求几个几天
t1='2021-03-12'
t2='2021-03-18'
diff=$(((`date -d "$t2" '+%s'` - `date -d "$t1" '+%s'`) / 86400))
echo $diff  # 6

比较日期大小

日期比较大小直接使用字符串形式比较,比较符是>,<,=,使用双中括号进行比较,如果是单中括号对于>需要转义\>

[[ '2021-01-01' > '2021-12-26' ]] && echo 1 || echo 0
0
[[ '2021-01-01' > '2020-12-26' ]] && echo 1 || echo 0
1

计算耗时

耗时使用时间戳秒格式进行相减即可

#!/bin/bash

t1=`date '+%s'`
sleep 3
t2=`date '+%s'`
echo $((t2 - t1))  # 输出3

与[转帖]Linux Shell:date日期时间操作相似的内容:

[转帖]Linux Shell:date日期时间操作

https://www.jianshu.com/p/cc9ebb212a8e 整理Linux Shell脚本中常用的日期操作,给予date命令,主要用法总结 获得当前日期,时间戳,date,date '+%s' 日期解析(字符串转日期,时间戳转日期)date -d 日期格式化输出,date '+%'

[转帖]Linux下Shell日期的格式

https://www.linuxprobe.com/linux-shell-date.html 导读 不管是哪种语言,日期/时间都是一个非常重要的值。比如我们保存日志的时候,往往是某个前缀再加上当前时间,这样日志文件名称就可以做到唯一。在Shell环境里,我们获取时间的命令是date,但date出

[转帖]linux中Shell日期转为时间戳的方法

http://www.nndssk.com/xtwt/169617hFPRvq.html shell中获取时间戳的方式为:date -d “$currentTime” +%s $ date -d @1337743485671 "+%c"Sun 28 May 44361 12:41:11 PM CST

[转帖]linux-shell总结(没事一看)

https://blog.51cto.com/wangaimin/1895607 !脚本执行与调试 1、绝对路径执行,要求文件有执行权限 2、以sh命令执行,不要求文件有执行权限 3、.加空格或source命令执行,脚本将在当前shell中执行 4、检查脚本语法 bash -v test.sh 5、

[转帖]Linux shell 按行循环读入文件常用代码如下:

Linux shell 按行循环读入文件常用代码如下: #/bin/bash printf "*************************************\n" echo " cat file whiel read line" cat test.txt |while read line

[转帖]Linux Shell 脚本的 10 个有用的“面试问题和解答”

http://blog.itpub.net/31545813/viewspace-2926667/ Linux 的浩瀚无垠,使人总能每次都提交与众不同的内容。这些内容不仅对他们的职业生涯很有用,同时也让他们增长知识。在此,我们就尝试这么去做,至于能取得多大的成功,就由我们的读者朋友们来判断吧。 在此

[转帖]linux-shell-命令替换和变量替换

https://www.muzhuangnet.com/show/84054.html 本文摘自PHP中文网,作者步履不停,侵删。 命令替换$() `` 1 Shell 命令替换是指将命令的输出结果赋值给某个变量 Shell 中有两种方式可以完成命令替换,一种是反引号 ,一种是$(),使用方法如下:

[转帖]linux shell中 if else以及大于、小于、等于逻辑表达式介绍

https://www.jb51.net/article/34332.htm 在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下,方便需要的朋友 比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。注意:这里的空格很重要。要确保方

[转帖]Linux Shell sort排序常用命令

https://www.jianshu.com/p/75c69236963f 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 [rocrocket@rocrocket programming]$ ca

[转帖]linux shell 脚本一些主要知识点整理

文章目录 一、/bin/sh 与 /bin/bash 的区别二、vi与vim的区别三、shell变量四、Shell字符串五、Shell函数六、Shell基本运算符1、Shell expr:进行整数计算2、Shell (()):对整数进行数学运算3、Shell let:对整数进行数学运算4、Shell