跳转到内容

Linux日期和时区管理

课程介绍

接下来我们学习日期和时区管理。date命令可以查看和格式化显示当前日期时间,还能进行日期计算,比如明天的日期。时区用timedatectl命令设置,比如timedatectl set-timezone Asia/Shanghai设置为中国时区。Linux还可以用NTP服务自动同步时间,确保系统时间准确。

1. date命令:查看和格式化日期时间

命令概述

date命令是Linux系统中用于查看和设置系统日期和时间的命令行工具。

基本语法

bash
date [选项] [+格式化字符串]

常用选项

选项功能描述
-d按照给定的字符串显示日期(用于日期计算)
-s设置系统日期和时间
-u显示或设置协调世界时(UTC)

常用格式化字符串

格式化字符功能描述
%Y四位数的年份(如2023)
%y两位数的年份(如23,范围00-99)
%m月份(01-12)
%d日期(01-31)
%H小时(00-23)
%M分钟(00-59)
%S秒(00-59)
%s时间戳(从1970年1月1日00:00:00到现在的秒数)
%A星期几的全名(如Monday)
%a星期几的缩写(如Mon)
%B月份的全名(如January)
%b月份的缩写(如Jan)

实例演示

2. 查看当前日期和时间

bash
# 默认格式显示
date

# 自定义格式显示(年-月-日)
date +"%Y-%m-%d"

# 自定义格式显示(年-月-日 时:分:秒)
date +"%Y-%m-%d %H:%M:%S"

# 显示时间戳
date +"%s"

3. 日期计算

使用-d选项可以进行日期计算。

bash
# 查看明天的日期
date -d "+1 day" +"%Y-%m-%d"

# 查看昨天的日期
date -d "-1 day" +"%Y-%m-%d"

# 查看下个月的今天
date -d "+1 month" +"%Y-%m-%d"

# 查看上个月的今天
date -d "-1 month" +"%Y-%m-%d"

# 查看明年的今天
date -d "+1 year" +"%Y-%m-%d"

# 查看昨天的同一时间
date -d "yesterday" +"%Y-%m-%d %H:%M:%S"

2. 修改Linux系统的时区

时区的概念

时区是地球上的区域使用同一个时间定义,地球被划分为24个时区,每个时区相差1小时。协调世界时(UTC)是全球标准时间,各地时区基于UTC进行偏移。

查看当前时区

bash
# 方法1:查看时区符号链接
ls -l /etc/localtime

# 方法2:使用date命令查看时区信息
date +"%Z"
# 输出解释:
# CST 通常表示以下三种时区之一:
# 1. China Standard Time (中国标准时间) - UTC+8(当系统时区设置为Asia/Shanghai时)
# 2. Central Standard Time (北美中部标准时间) - UTC-6
# 3. Cuba Standard Time (古巴标准时间) - UTC-5
# 在Rocky Linux 9中,当时区设置为Asia/Shanghai时,CST表示中国标准时间

# 方法3:使用timedatectl命令查看时区信息
timedatectl

# 方法4:查看时区文件内容(注意:Rocky Linux 9默认可能没有此文件)
# 对于Rocky Linux 9,时区信息主要存储在/etc/localtime符号链接中
# 对于Ubuntu/Debian系统,可以查看:
# cat /etc/timezone

修改时区

方法1:使用timedatectl命令(推荐)

bash
# 查看可用时区列表
timedatectl list-timezones

# 设置时区为亚洲/上海
timedatectl set-timezone Asia/Shanghai

# 验证时区设置
timedatectl

方法2:手动创建符号链接

bash
# 删除现有链接
rm -f /etc/localtime

# 创建新的符号链接
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 验证时区设置
date

3. 使用NTP进行时间同步和校准

NTP概述

NTP(Network Time Protocol)是一种用于同步计算机时钟的网络协议,可以使计算机时间与全球标准时间保持一致。

安装时间同步服务

bash
# Rocky Linux 9/RHEL系统(推荐使用chrony)
dnf -y install chrony

# Ubuntu/Debian系统(推荐使用chrony)
apt-get -y install chrony

# Ubuntu/Debian系统(传统ntpd,已过时)
# apt-get -y install ntp

启动和设置时间同步服务

bash
systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd

# 传统ntpd服务(已过时,不推荐)
# systemctl start ntpd
# systemctl enable ntpd

手动进行时间同步

使用chronyc命令可以手动进行时间同步。

bash
# 查看时间源状态(详细信息)
# 输出解释:
# ^* 表示当前正在使用的时间源
# ^+ 表示可接受的时间源
# ^? 表示连接失败的时间源
# ^- 表示被拒绝的时间源
chronyc sources -v

# 查看时间同步状态(详细信息)
# 输出解释:
# Reference ID: 时间源的ID
# Stratum: 时间源的层级(0为顶级,1为直接连接到顶级的服务器)
# Ref time (UTC): 参考时间
# System time: 系统时间与参考时间的偏差
# Last offset: 上次同步的时间偏移
# Root delay: 到根时间源的网络延迟
# Root dispersion: 时间源的最大误差
# Update interval: 同步间隔
# Leap status: 闰秒状态
chronyc tracking

# 强制立即同步时间
# 注意:在Rocky Linux 9中,普通用户执行此命令可能会报错
# 解决方法:使用sudo权限执行
# sudo chronyc makestep
chronyc makestep

常见错误及解决方案

  • 错误:501 Not authorised 原因:普通用户没有权限执行makestep命令 解决方案:使用sudo权限执行:sudo chronyc makestep

注意

  • Rocky Linux 9默认使用chrony作为时间同步服务
  • Ubuntu 20.04+也推荐使用chrony,它比传统的ntpd更快速、更准确
  • chrony会自动同步时间,通常不需要手动干预
  • Ubuntu默认可能已启用systemd-timesyncd轻量级时间同步服务
  • 在生产环境中,建议保持chrony的自动同步机制,避免频繁手动同步

常用NTP服务器

服务器名称服务器地址
阿里云NTP服务器ntp.aliyun.com
中国科学院国家授时中心ntp.ntsc.ac.cn
清华大学NTP服务器ntp.tuna.tsinghua.edu.cn
腾讯云NTP服务器time1.cloud.tencent.com
全球通用NTP服务器pool.ntp.org

4. 关键命令参考

命令功能描述
date查看当前日期和时间
date +"%Y-%m-%d"以年-月-日格式显示日期
date +"%Y-%m-%d %H:%M:%S"以年-月-日 时:分:秒格式显示日期时间
date -d "+1 day"查看明天的日期
date -d "-1 month"查看上个月的今天
ls -l /etc/localtime查看当前时区
timedatectl set-timezone Asia/Shanghai设置时区为亚洲/上海
dnf -y install chrony安装chrony时间同步服务(Rocky Linux)
apt-get -y install chrony安装chrony时间同步服务(Ubuntu)
systemctl start chronyd启动chrony时间同步服务
systemctl enable chronyd设置chrony服务开机自启
chronyc tracking查看时间同步状态
chronyc sources -v查看时间源状态


课程总结

这节课我们学了三个重点:

1. 查看和计算日期时间

  • date 命令看当前时间,还能自定义显示格式
  • -d 参数可以算日期,比如 date -d "+1 day" 就是明天

2. 设置时区

  • timedatectl set-timezone Asia/Shanghai 就能改成中国时区

3. 自动同步时间

  • 装个 chrony 服务,系统时间就会自动和标准时间对齐
  • 不管是 Rocky Linux 还是 Ubuntu,都推荐用 chrony
  • 装完设置开机自启,以后就不用管时间准不准了

课后练习

  • 使用date命令查看当前系统日期和时间,分别以不同格式显示
  • 使用date命令计算明天、下周同一时间的日期
  • 修改系统时区为Asia/Shanghai
  • 安装chrony时间同步服务并设置开机自启
  • 使用chronyc命令查看时间同步状态

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径