使用linux date命令查看当前时间

第一次发文,大佬勿喷。

什么是linux date

Linux中,date命令是最基础的也是最实用的linux命令,虽然它不是其内置命令 ,但是还是非常重要的,我们通过通过该命令查看时间、修改时间 或者是 格式化时间,date都可以运用自如,本篇将来介绍如何使用date命令玩转时间。

如果在linux中,没有date命令(一般不会),则需要安装coreutils包才行,centos安装参考:

arduino 复制代码
# yum install coreutils

安装完毕后,可以查看date的版本:

lua 复制代码
# date --version

小技巧

如何查看命令是否是内置的呢?可以使用type跟上命令来查看,如果输出is a shell builtin则是内置命令,否则是外部命令。

例如: cd是内置命令,可以使用type cd来查询:

bash 复制代码
# type cd

cd is a shell builtin

#

date则不是,同样可以使用type date来查询:

bash 复制代码
# type date

date is hashed (/usr/bin/date)

#

date输出当前时间

linux中,我们仅需在终端中输入date而后回车,即可得到当前系统时间,例如:

shell 复制代码
# date 
Tue Jul 24 21:02:22 CST 2023
# 

上述命令已经输出了系统的时间,它所对应的格式为 星期、月份、时区、时间、年份,即 输出的时间为 "2023年07月24日晚上21点02分22秒",时区信息为CST则表示中国标准时间,是由UTC+8小时得来的。

自定义格式

除了固定格式外,还支持自定义格式,在date后面跟上+,输入相应的格式字符,也可以输出时间,其中格式字符参照为:

格式字符串 含义
%Y 4位数的年
%y 2位数的年
%m 月份
%d 月的天数
%H 24小时制
%I 12小时制
%M 分钟
%S 秒数

来尝试一下,输出当前时间,可以使用命令:

shell 复制代码
# date +"%Y-%m-%d %H:%M:%S"
2023-07-24 21:26:20
#

如上命令,使用date按照时间格式"年-月-日 时:分:秒" 的格式输出时间,只需输入date +格式字符串即可。

其实上面命令还有更加简约的方式,即: %Y-%m-%d可以使用%F代替,%H:%M:%S可以使用%T代替,即,这样的命令也可以输出格式化后的时间:

shell 复制代码
# date +"%F %T"
2023-07-24 21:29:45
#

关键字转义

从上面案例,知道了%是自定义格式的关键字,那么如果想输出2023%07%24这种格式的,应该如何写呢?

直接使用%Y%%m%%d, 其效果会变成这样:

shell 复制代码
# date +"%Y%%m%%d"
2023%m%d
# 

这种情况下,可以使用%%来转义该%字符,即:

shell 复制代码
# date +"%Y%%%m%%%d"
2023%07%24
#

如上案例看上去非常复杂,其实解析下来非常简单,即:

如图所示,其中%%会被转义为普通字符%

转换为时间戳

date中,若想获取当前时间的时间戳,可以使用date +"%s"来实现,例如:

shell 复制代码
# date +"%s"
1690206604
#

若想获取其他时间的时间戳,可以使用-d指定时间,再使用+%s转换为时间戳,例如:

shell 复制代码
# date -d"2023-07-24 21:50:04" +"%s" 
1690206604
#

输出特殊的时间

假设有一个需求,给定一个时间,想要获取该时间是属于当前周的周几?应该如何写呢?

其实这个非常简单哈,这里简单些一个小脚本案例:

bash 复制代码
#!/bin/bash

# 给定一个时间,想要获取该时间是属于当前周的周几

read -p "请输入时间,格式为[YYYY-mm-dd HH:MM:SS]" dates

# 转换为时间戳
unixDate=$(date -d "$dates" +"%s")

# 获取从格林时间以来经过的天数
days=$(( $unixDate / (24 * 60 * 60)))

# 获取周几
week=$(( ($days + 4) % 7 ))

echo "$week"

上面的脚本含义非常简单,先使用read获取时间,存储在变量dates中,而后将dates转换为时间戳,存储到变量unixDate中,而后获取自unix时间为0,即北京时间1970-01-01 08:00:00至当前unixDte时间戳存储的天数,最后将 天数+4对7进行取余,加上4的意思为1970-01-01是从周四开始的,所以需要加上4。

脚本执行后效果如下:

上述只是实现了一个最简单的功能,所以没有对用户输入的时间进行检验。但是可以看到,如果输入正常时间,是可以推算出时间是周几的。

上面的实现是不是非常复杂呢,其实在date中,已经提供好了相应的命令,使用date +"%u"即可获取今天是本周的周几,例如:

shell 复制代码
# date +"%u"
1
#

假设想要获取2023-07-25是周几,可以使用-d来指定时间,再使用+%u来获取周几,命令即:

shell 复制代码
# date -d "2023-07-25" +"%u"
2
#

上面只是一个简单的抛砖引玉,其实date提供了非常多的这种案例,转换为表格为:

格式字符串 含义
%u 获取时间是周几(1-7)
%w 获取时间是周几(0-6)0是周末
%j 获取时间是一年的地多少天
%U 获取时间是一年的第多少周

这里就不过多展示了。

总结

centos中,如果没有date命令,则可以使用yum install coreutils安装即可。直接使用date会输出当前时间,格式为星期、月份、时区、时间、年份,不仅如此,还能支持众多的格式,比如%F %T可以以yyyy-mm-dd HH:MM:SS的形式输出时间。最后介绍了如何获取特殊的时间,例如:时间是周几、是本年的第多少周等等。文章只是起到一个抛砖引玉的作用,如果感兴趣,还请使用man date查看更加详细的信息。

相关推荐
dingdingfish1 天前
GNU Parallel 学习 - 第1章:How to read this book
bash·shell·gnu·parallel
似霰4 天前
Linux Shell 脚本编程——核心基础语法
linux·shell
似霰5 天前
Linux Shell 脚本编程——脚本自动化基础
linux·自动化·shell
偷学技术的梁胖胖yo6 天前
Shell脚本中连接数据库查询数据报错 “No such file or directory“以及函数传参数组
linux·mysql·shell
纵有疾風起15 天前
【Linux 系统开发】基础开发工具详解:软件包管理器、编辑器。编译器开发实战
linux·服务器·开发语言·经验分享·bash·shell
gis分享者17 天前
Shell 脚本中如何使用 here document 实现多行文本输入? (中等)
shell·脚本·document·多行·文本输入·here
柏木乃一17 天前
基础IO(上)
linux·服务器·c语言·c++·shell
angushine17 天前
CPU脚本并远程部署
shell
赵民勇22 天前
Linux/Unix中install命令全面用法解析
linux·shell
gis分享者23 天前
Shell 脚本中如何使用 trap 命令捕捉和处理信号(中等)
shell·脚本·信号·处理·trap·捕捉