使用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查看更加详细的信息。

相关推荐
猿java14 小时前
Linux Shell和Shell脚本详解!
java·linux·shell
运维小文3 天前
linux中的特殊符号
linux·正则表达式·shell·linux命令
致奋斗的我们5 天前
RHCE的学习(22)
linux·服务器·学习·shell·redhat·rhce·rhcsa
致奋斗的我们6 天前
RHCE的学习(21)
linux·学习·shell·redhat·rhce·rhcsa
vortex58 天前
Shell脚本基础(2):环境变量、位置变量与运算符
linux·shell·脚本
修行者xxl8 天前
UEFI Shell命令(二)
shell·uefi
码农不惑8 天前
如何在Debian系统里使用Redhat(CentOS)的方式配置网络
网络·centos·debian·shell·redhat
yanlaifan8 天前
shell bash---类似数组类型
shell
scoone9 天前
ssh登陆服务器后支持Tab键命令补全
linux·shell
keep__go10 天前
Linux 批量配置互信
linux·运维·服务器·数据库·shell