首页 > 系统相关 >linux基本功系列之date命令实战

linux基本功系列之date命令实战

时间:2023-02-08 12:31:32浏览次数:41  
标签:01 -- mufenggrow linux date CST 基本功 root

(文章目录)


前言

在日常工作中,我们经常会用到date命令来判断任务执行的时间,或者使用date命令去实现时间段内的工作任务,今天我们一起来探讨下date命令

:blush:


一、date简介

date 英[deɪt] 日期,时间,时间,约会时间,海枣 date 命令用于 显示 或 设置系统的时间或日期。 date命令来自于英文单词的时间、时钟 :stuck_out_tongue_winking_eye:

二、常用参数

2.1 date命令的使用格式

格式:date [参数] [+日期格式]

2.2 常用参数和格式

这里我们使用--help帮助,查看常用的参数

[root@k8s-master ~]# date --help
用法:date [选项]... [+格式]
 或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

  -d, --date=STRING         display time described by STRING, not 'now'
  -f, --file=DATEFILE       like --date once for each line of DATEFILE
  -I[TIMESPEC], --iso-8601[=TIMESPEC]  output date/time in ISO 8601 format.
                            TIMESPEC='date' for date only (the default),
                            'hours', 'minutes', 'seconds', or 'ns' for date
                            and time to the indicated precision.
  -r, --reference=文件		显示文件指定文件的最后修改时间
  -s, --set=STRING          set time described by STRING
  -u, --utc, --universal    print or set Coordinated Universal Time (UTC)
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

	

通过上述帮助命令,我们可以看到,常用的一些参数:

在这里插入图片描述 常用格式:

格式 描述
%F 日期 yyyy-mm-dd的格式来表示
%y 年份最后两位数位 (00-99)
%Y 年份 4位数的年份
%m month (01..12)
%b 月份的简写
%B 月份的全写
%d 月计的日期(例如:01)
A% 星期几的全蝎,比如date +%A%a
%M minute (00..59)
%H 小时(00-23)
%S 秒(00-60)
%s 从 1970年1月1日0点0分0秒到现在历经的秒数 (GNU扩充)
%t 输出制表符号
%Z 时区

2.3 date应用示例

2.3.1 以默认格式输出系统当前的日期与时间信息

此处直接写date即可,显示完整的日期格式。

[root@mufenggrow ~]# date
2023年 01月 11日 星期三 19:16:52 CST

这里的CST表示时区的缩写,一般可视为中国的标准时间或者美国中部时间

2.3.2 按照年-月-日的指定格式输出日期

[root@mufenggrow ~]# date +%F
2023-01-11

以上方式类似与:

[root@mufenggrow ~]#  date "+%Y-%m-%d"
2023-01-11

可以看到两种方式显示的结果一样,我们默认情况下直接使用 %F即可。

2.3.3 按格式年-月-日 时:分:秒输出当前日期

[root@mufenggrow ~]# date "+%Y-%m-%d %H:%M:%S"
2023-01-11 19:20:06

这里的 - 或者: ,仅仅作为一个连接符使用,可以换成其他任何的形式。

2.3.4 使用-d参数指定时间运算

格式: date -d '运算规则' 作用:指定时间运算规则,date会将当前时间做指定的运算,然后输出运算后的时间

[root@mufenggrow ~]# date -d '3 minutes'  ## 三分钟后
2023年 01月 11日 星期三 19:24:10 CST
[root@mufenggrow ~]# date -d '3 days'
2023年 01月 14日 星期六 19:21:17 CST
[root@mufenggrow ~]# 
[root@mufenggrow ~]# date
2023年 01月 11日 星期三 19:21:50 CST
[root@mufenggrow ~]# date -d '-3 minutes'
2023年 01月 11日 星期三 19:18:51 CST
[root@mufenggrow ~]# 

2.3.5 使用 -f 参数,进行多行输入

格式:date -f 文件路径 作用:可将-d参数指定的运算规则写入文件中,通过-f参数指定文件路径,date命令逐行读取该文件,并按照此文件指定的运算规则输出运算后的时间。

[root@mufenggrow ~]# cat >>/root/datefile <<EOF
> date  
> 1 years ago
> 3 months
> 2 days
> 1 year
> -3 days
> EOF
[root@mufenggrow ~]# date -f datefile 
date: 无效的日期"date"
2022年 01月 11日 星期二 19:26:08 CST
2023年 04月 11日 星期二 19:26:08 CST
2023年 01月 13日 星期五 19:26:08 CST
2024年 01月 11日 星期四 19:26:08 CST
2023年 01月 08日 星期日 19:26:08 CST
[root@mufenggrow ~]# 

可以看到,直接写date是不行的,当使用-f的时候,文件内容应该写运算规则。

2.3.6 -s 参数,修改系统时间

格式:date -s ‘字符串’ 作用:根据-s指定的内容设定系统的时间。执行此命令需要提权

这里需要说明的是: 由于跨年、跨月、闰平年等特殊性,在日常编程过程中对日期的处理总是异常麻烦。 目前,各种编程语言也都要自己的日期函数库,所以在对日期进行处理前,一定先查查你使用的编程语言有没有日期函数库。

[root@mufenggrow ~]# date -s " 20121212 8:30:00"
2012年 12月 12日 星期三 08:30:00 CST
[root@mufenggrow ~]# date
2012年 12月 12日 星期三 08:30:01 CST
[root@mufenggrow ~]# 


如果要还原 回来需要用到时间同步服务器,ntpdate

比如要与上海时区时间同步:

[root@mufenggrow ~]# ntpdate -u ntp.api.bz
11 Jan 19:39:30 ntpdate[75487]: step time server 114.118.7.161 offset 318164310.373762 sec
[root@mufenggrow ~]# date
2023年 01月 11日 星期三 19:39:32 CST
[root@mufenggrow ~]# 

2.3.7 -r 显示文件最后被修改的时间

-r 等于 --reference

使用方法: 格式:date -r 文件路径 作用:显示指定文件最后被修改的时间。

t@mufenggrow ~]# date -r datefile 
2023年 01月 11日 星期三 19:25:57 CST
[root@mufenggrow ~]# 

注:cat查看文件不影响,vim进入文件即会修改时间


2.3.8 计算1970年距今的秒数

date +%s
//从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数(时间戳)

[root@mufenggrow ~]# date +%s
1673437755

这个秒数带了时区计算,所以得额外判断时区。

我们可以写脚本检测一组命令花费的时间: 脚本思路:

  1. 先计算命令执行前距离1970的秒数并赋值给start变量
  2. 执行命令
  3. 执行完后再次统计当前距离1970年产生的秒数并赋值给end
  4. 然后对start和end做运算,计算两者的差值。
  5. 之后打印这个差值,这个差值就是命令花费的时间

代码示例如下:

[root@mufenggrow ~]# cat a.sh 
start=$(date +%s)
ping -c10 -w10 www.baidu.com &>/dev/null
end=$(date +%s)
diff=$((end - start))
echo $diff seconds

当然这个脚本还可以继续完善,让他具备更强大的功能

总结

关于date的命令我们就探讨完了,date在日常的工作中,使用的还是比较多的,如果有问题可以留言。

标签:01,--,mufenggrow,linux,date,CST,基本功,root
From: https://blog.51cto.com/zmedu/6044077

相关文章

  • linux无阻塞输入
    //头文件#include<sys/ioctl.h>#include<sys/io.h>ioctl(STDIN_FILENO,FIONBIO,&attr);//清除阻塞输入,attr为1,这时读取不能使用getchar或scanf,如果没数据会直接返回len......
  • Linux编写C/C++程序
    ​1、安装gcc、g++编译器1.切换root用户suroot然后输入密码2.输入命令yuminstallgccyuminstallg++3.通过查找路径来检查安装是否完成whichgccw......
  • linux系统安装java环境
    首先要去官网下载jdk,网址:https://www.oracle.com/java/technologies/downloads/#java8下载好压缩包后用XShell连接linux进入usr/local:cdusr/local 然后通过xftp将......
  • sources.list update repository
    sources.listdebhttp://mirrors.aliyun.com/ubuntu/bionicmainrestricteduniversemultiversedebhttp://mirrors.aliyun.com/ubuntu/bionic-securitymainrestr......
  • linux配置jdk
    1、root用户配置,vim/etc/profile,添加如下内容#setjavaenviromentJAVA_HOME=/opt/jdk1.8.0_311JRE_HOME=/opt/jdk1.8.0_311/jreCLASS_PATH=.:$JAVA_HOME/lib/dt.jar......
  • Linux 多进程程序调试实例(七) -- 套接字
    套接字套接字介绍socket套接字是支持不同主机不同进程之间的通信套接字函数socket套接字函数介绍套接字编程在服务端,套接字编程顺序为套接字创建(socket),套接......
  • MyBatis-Plus——saveOrUpdate方法如何确定主键
    saveOrUpdate方法:先更新,更新失败返回0;发起查找,查找失败返回0,最后进行插入操作有三种执行情况1.插入的数据不带id插入成功。同时MyBatis-Plus会自动生成一个19位的id,默认主......
  • Linux 目录的可执行权限的含义
    总所周知:Linux的文件和目录的权限,只有RWX三种。r(Read,读取)对于文件:具有读取文件内容的权限对于目录:具有浏览目录的权限w(Write,写入)对于文件:具有新增,修改,删除文......
  • linux安装maven
    下载安装mavenmaven官网:https://maven.apache.org/download.cgi下载完成后,解压文件,将解压后的maven文件移动到想放的目录下配置mavenmaven仓库资源目录设置配置文件......
  • Jmeter-后置处理器-json提取器(相对路径${..date})与正则提取器(万能表达式.*?)
    1、json提取器-相对路径以及多个参数(写默认值)  如果你的响应体为json格式,那么优先选用json提取器如果想要提前请求中内容、响应的头部内容、或者响应体格式非json格......