date命令-显示与设置系统时间

262 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情

一、命令详解

1.1【功能说明】

date命令用于显示当前的系统时间或设置系统时间。

1.2【语法格式】

[root@7bfe451a2fe1 /]# date --help
Usage: date [OPTION]... [+FORMAT]
  or:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.

1.3【选项说明】

OPTION参数说明

  • -d 时间字符串 设置指定字符串所描述的时间,而非当前时间
  • -f 时间文件 从日期文件中按行读入时间描述
  • -r 文件 显示指定文件的最后修改时间
  • -s 日期时间 设置系统时间
  • -u 显示或设置UTC时间
  • -R 显示时区

FORMAT日期格式,这里只列举常用的

  • %Y 年份 如:2022
  • %m 月份 01-12
  • %d 每月的第几天
  • %H 小时 00-23
  • %M 分 00-59
  • %S 秒 00-60
  • %N 纳秒 000000000-999999999
  • %s 自UTC时间1970-01-01 00:00:00以来所经过的秒数,到现在为止10位数
  • %n 换行符
  • %F 显示日期 2022-12-12
  • %T 显示时间 12:23:30
  • %c 按CST格式显示时间 Thu Dec 15 17:45:07 2022

二、使用范例

2.1 基本用法-日期格式

# 按格式 yyyy-mm-dd H:M:S 来显示当前时间
date '+%Y-%m-%d %H:%M%S'
date '+%F %T'

# 日期与时间分两行显示
date '+%F%n%T'

image-20221216011202818.png

2.2 获取相对时间

# 显示今天
date +%F

# 显示昨天
date +%F -d "-1day"
date +%F -d "yesterday"

# 显示前天
date +%F -d "-2day"

# 显示明天
date +%F -d "1day"
date +%F -d "tomorrow"

# 显示后天
date +%F -d "2day"

# 显示一个月后
date +%F -d "1month"

# 显示一年后
date +%F -d "1year"

# 20小时以后
date "+%F %T" -d "24hour"

# 30分钟之后的时刻
date "+%F %T" -d "30min"

# 30分钟之前的时刻
date "+%F %T" -d "-30min"

说明

  1. +号表示未来,-号表示过去
  2. year表示年,month表示月,hour表示小时,min表示分钟

image-20221216012556889.png

image-20221216012509621.png

2.3 转换日志的时间格式

# 生成的日志内容格式为
Sat May 19 13:40:02 CST 2022 is 1234567889
# 要求将其中的日期格式转换为yyyy-mm-dd H:M:S
2022-05-19 13:40:02

# 转换的命令为,这里用到了awk
awk -F "is" '{print "echo $(date -d \""$1"\" \"+%F %T\")", $2}' test.log | bash

image-20221216014122741.png

2.4 设置日期

sudo date -s "2022-12-15 18:00:00"

说明:

  • 要有root权限

2.5 查看时区

date -R

image-20221216014806494.png

三、扩展知识

3.1 不同机器之间的时间同步

为了避免主机时间因为长期动作下产生时间偏差,进行时间同步的工作是非常必要的。linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务器和ntp客户机。在网络中推荐例使用dns服务器一样的服务器来同步时间

# 同步时间
ntpdate time.ntp.org

# 一般配合cron今天放假,来里德定期同步设置,在crontab中添加
# 这样每天12点整就会同步一次时间
0 12 * * * * /usr/bin/ntpdate time.ntp.org

3.2 系统时间同步到硬件时间

# 查看硬件时间
hwclock --show

# 设置硬件时间
hwclock -s -d "12/12/22 00:00:00"

# 系统时间同步到硬件时间
sudo hwclock --systohc

四、命令总结

  • 2022/12/16 简单的命令,每天可以多总结一些