时间命令date,你真的会用了吗?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 时间命令date,你真的会用了吗?

在linux操作系统中,时间命令 date 是用得比较频繁,例如在收集日志,同步服务器集群,包括在大数据开发领域,对于date命令的使用都是很常见的。下面我们就来简单看一下该命令的语法规则。

语法

格式化

  • 使用%Y进行格式化
  • 使用%m进行格式化
  • 使用%d进行格式化
  • 小时
  • 使用%H进行格式化
  • 分钟
  • 使用%M进行格式化
  • 使用%S进行格式化
  • 星期
  • 使用%A进行格式化

-d实现日期的加减

-d选项允许你指定一个日期,然后进行加减操作。可以使用类似"tomorrow"、"next week"、"2 days ago"等相对描述,也可以指定具体的日期。

同时,指定日期的支持的加减操作支持连续加减。-1 month +1 day这样的形式,执行顺序为从左到右依次执行。

使用$()嵌套执行date命令

可以嵌套执行date命令,因为有一些时间无法直接由当前的时间一次执行完成,就需要使用$()执行嵌套版的date命令。

应用实例

首先我们定义一个shell,用于测试我们的应用实例,下面是定义的初始shell

#!/bin/sh
# 输入一个日期参数
if [ $# -lt 1 ];then
        echo "retCode:-1"
        echo "未输入日期参数"
        exit 1
fi
current_day=$1 
ans=`占位命令`
echo ${ans}

获取当前日期上一年的最后一天

date -d "${current_day} -1 year" "+%Y1231"

给日期加上横线

date -d "${current_day}" "+%Y-%m-%d"

获取当前月份

date -d "${current_day}" "+%Y%m"

获取上月的第一天

date -d "${current_day} -1 month" "+%Y%m01"

获取当前年

date -d "${current_day}" "+%Y"

可以发现,活动这些日期主要都是通过改变我们输出的格式,即%Y%m%d和参数-d来实现的,其中,参数-d后面可以跟加减号,从而得到对应的日期。让我们接着练习。

获取下个月的第一天

date -d "${current_day} +1 month" "+%Y%m01"

获取本月的最后一天

last_month_first_day=`date -d "${current_day} +1 month" "+%Y%m01"`
this_month_last_day=`date -d "${last_month_first_day} -1 day" "+%Y%m%d"`

也可以缩写为:

date -d "$(date -d "${current_day} +1 month" "+%Y%m01") -1 day" "+%Y%m%d"

获取上个月的最后一天

date -d "$(date -d "${current_day}" "+%Y%m01") -1 day" "+%Y%m%d"

获取本年的最后一天

date -d "$(date -d "${current_day} +1 year" "+%Y0101") -1 day" "+%Y%m%d"

或者

date -d "${current_day}" "+%Y1231"

结果一样,这说明,每一种时间其实都有多种表示方式,就拿本年的最后一天为例,它既可以是下一年第一天的上一天也可以直接用当前年截断格式化后加上1231。我们需要找到简便一些的方法,减少维护的成本。

date命令的应用场景

以下是一些常见的用途:

  1. 日志记录和时间戳: 在大数据处理中,日志记录是非常重要的。date命令可以用来生成时间戳,将其添加到日志文件中,以便在分析和调试时了解事件发生的时间。
# 生成当前日期和时间的时间戳
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "Event occurred at $timestamp" >> logfile.txt

2.调度任务: 在大数据处理中,任务调度是一个常见的操作。date命令可用于生成定时器,以便在特定的日期和时间执行任务。例如,使用Cron作业调度系统。

# 每天凌晨执行数据处理任务
0 0 * * * /path/to/data_processing_script.sh

3.备份和归档: 在运维中,定期备份是确保系统可靠性和数据完整性的关键操作。date命令可用于创建备份文件名,以确保每个备份都有一个唯一的标识符。

# 创建带有日期的备份文件
backup_filename="backup_$(date +"%Y%m%d").tar.gz"
tar -czf $backup_filename /path/to/data

性能分析: 在运维中,对系统性能进行分析和调优是常见的任务。date命令可用于测量脚本或命令的执行时间,以便确定性能瓶颈。

# 测量命令执行时间
start_time=$(date +%s)
# 执行一些操作
end_time=$(date +%s)
execution_time=$((end_time - start_time))
echo "Script executed in $execution_time seconds."
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
Unix Linux Shell
【Shell 编程指南 日期命令】Date命令:显示与设置系统时间和日期
【Shell 编程指南 日期命令】Date命令:显示与设置系统时间和日期
154 0
|
Python
时间戳用法
时间戳是一种记录时间的方式,它是一个数字,表示从特定时间(如1970年1月1日00:00:00 UTC)到当前时间的秒数或毫秒数。时间戳可以用于记录事件发生的准确时间,也可以用于计算时间间隔和时差。
164 0
|
3月前
|
Shell
9-17|远端执行date命令报错
9-17|远端执行date命令报错
|
4月前
|
监控 编译器 C++
【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)
【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)
159 0
|
Python
python 获取、修改 时间戳 时间属性 文件时间
python 获取、修改 时间戳 时间属性 文件时间
76 0
|
JavaScript 前端开发
什么是时间戳及用法
什么是时间戳及用法
136 0
|
存储 关系型数据库 MySQL
MySQL存储时间是存时间戳和还是年月日时分秒格式的时间好?底层原理是什么?
MySQL存储时间是存时间戳和还是年月日时分秒格式的时间好?底层原理是什么?
950 1
|
存储 JSON 缓存
Laravel 7.0中 timestamp 取出来的时间慢的8小时问题
部署博客后,评论的时间不正确,比正常时间慢了8小时; 都是用的 timestamp 字段存储的时间,只有评论留言取出来的时间慢的8小时,其他没有页面没有;
301 0
|
JSON 前端开发 关系型数据库
解决mysql 库中间时间查询出来是时间戳方法 【数据库查询出时间,传给前端变为时间戳】【可用】
解决mysql 库中间时间查询出来是时间戳方法 【数据库查询出时间,传给前端变为时间戳】【可用】
335 0
|
Linux
date命令计算出系统启动时间
1 date简介 在linux 中date命令有很多用法,本文简单介绍一下 -d 参数的用法。
225 0