Linux - 日期时间篇

date 是 Linux/Unix 系统中用于查看和设置系统日期与时间的核心命令,默认输出当前系统的本地时间,支持自定义格式、转换时区等功能,日常使用频率极高。以下是其基础用法、常用格式及进阶操作:

一、基础用法(查看时间)

直接输入 date 命令,默认以系统预设格式输出当前本地时间(包含星期、年月日、时分秒、时区):

date
# 示例输出(格式:星期 月 日 时:分:秒 时区 年)
Wed Nov  5 14:30:25 CST 2025
  • CST 表示时区(中国标准时间,对应 UTC+8);
  • 不同系统的默认格式可能略有差异,但核心信息一致。

二、自定义时间格式

通过 格式控制符 自定义输出内容(如仅显示日期、仅显示时间、指定分隔符),格式为 date +"格式字符串"+ 是固定前缀,格式符以 % 开头)。

常用格式示例

命令 输出结果示例 用途说明
date +"%Y-%m-%d" 2025-11-05 年-月-日(ISO 标准格式)
date +"%H:%M:%S" 14:35:40 24小时制 时:分:秒
date +"%Y-%m-%d %H:%M:%S" 2025-11-05 14:36:15 完整日期+时间(常用日志)
date +"%m/%d/%Y" 11/05/2025 月/日/年(美式格式)
date +"%A, %B %d, %Y" Wednesday, November 05, 2025 完整英文格式(星期、月份)
date +"%s" 1762236985 时间戳(自1970-01-01 00:00:00 UTC 起的秒数)

格式符说明

格式符 含义 示例
%Y 4位年份 2025
%m 2位月份(01-12) 11
%d 2位日期(01-31) 05
%H 24小时制小时(00-23) 14
%M 分钟(00-59) 38
%S 秒(00-59) 52
%A 完整星期名(英文) Wednesday
%B 完整月份名(英文) November
%s Unix 时间戳(秒) 1762237132

三、进阶操作(设置/转换时间)

1. 查看其他时区的时间

默认显示本地时区(如 CST),可通过 TZ 环境变量临时查看其他时区时间(无需修改系统配置):

# 查看 UTC 时间(世界协调时间)
TZ=UTC date
# 示例输出:Wed Nov  5 06:40:18 UTC 2025(比 CST 晚8小时)

# 查看纽约时间(美国东部时间,UTC-5/UTC-4,夏令时会变化)
TZ=America/New_York date
# 示例输出:Wed Nov  5 02:41:30 EDT 2025
  • 时区名称参考:/usr/share/zoneinfo/ 目录下的文件夹名(如 Asia/ShanghaiEurope/London)。

2. 查看指定日期的时间(时间戳/字符串转换)

可将 时间戳日期字符串 转换为可读格式,或计算指定日期的信息:

# 1. 时间戳转可读时间(示例:转换时间戳 1762237132)
date -d @1762237132
# 输出:Wed Nov  5 14:38:52 CST 2025

# 2. 计算“指定日期”的时间(如 2025年12月25日)
date -d "2025-12-25"
# 输出:Thu Dec 25 00:00:00 CST 2025

# 3. 计算“相对时间”(如 3天后、1小时前)
date -d "+3 days"  # 3天后的当前时间
date -d "-1 hour"  # 1小时前的时间
date -d "next Monday"  # 下周一的当前时间
  • 参数 -d--date):用于指定“待处理的日期/时间字符串”,支持相对时间(+/- N units)和绝对时间。

3. 设置系统时间(需 root 权限)

仅当系统未同步网络时间(如 NTP)时,可手动设置时间(需 sudo 或 root 身份):

# 格式:date -s "日期时间字符串"
sudo date -s "2025-11-05 15:00:00"  # 设置系统时间为 2025-11-05 15:00:00

# 单独设置日期(时间不变)
sudo date -s "2025-11-06"

# 单独设置时间(日期不变)
sudo date -s "15:30:00"
  • 注意:手动设置的时间会在系统重启后失效,需配合 hwclock 命令同步到硬件时钟(BIOS 时间):
    sudo hwclock -w  # 将系统时间写入硬件时钟
    

四、常见误区

  1. 自定义格式漏写 +:必须用 date +"%Y-%m-%d",漏写 + 会报错或输出默认格式;
  2. 设置时间无权限:普通用户无法修改系统时间,必须加 sudo
  3. 相对时间格式错误date -d "+3 day"(单数 day)也有效,但推荐用复数 days,兼容性更好;
  4. 时间戳单位混淆date -d @xxx 中的 xxx秒级时间戳,若为毫秒级(如 1762237132123),需先除以 1000(如 date -d @$((1762237132123/1000)))。

五、常用 date 命令速查表

以下按「基础查看」「自定义格式」「时间转换」「系统设置」分类,整理了日常高频使用的 date 命令,可直接复制执行:

基础时间查看(默认格式)

命令 功能 示例输出
date 查看当前本地时间(完整信息) Wed Nov 5 14:30:25 CST 2025
date -u 查看 UTC 世界协调时间 Wed Nov 5 06:30:25 UTC 2025
date +"%Z" 仅查看当前时区 CST

自定义格式(高频场景)

1. 日期相关

命令 功能 示例输出
date +"%Y-%m-%d" 年-月-日(ISO 标准,日志/脚本常用) 2025-11-05
date +"%m/%d/%Y" 月/日/年(美式格式) 11/05/2025
date +"%d-%b-%Y" 日-缩写月-年(英文缩写) 05-Nov-2025
date +"%A, %B %d" 完整星期 + 完整月份 + 日期 Wednesday, November 05

2. 时间相关

命令 功能 示例输出
date +"%H:%M:%S" 24小时制 时:分:秒 14:35:40
date +"%I:%M:%S %p" 12小时制 时:分:秒 + 上午/下午 02:35:40 PM
date +"%s" 生成 Unix 时间戳(秒级,接口/脚本常用) 1762236985

3. 日期+时间组合

命令 功能 示例输出
date +"%Y-%m-%d %H:%M:%S" 完整日期+24小时制时间(最常用) 2025-11-05 14:36:15
date +"%Y%m%d_%H%M%S" 无分隔符格式(用于文件名,如日志文件) 20251105_143615

时间转换与计算

1. 时间戳 ↔ 可读时间

命令 功能 示例输出
date -d @1762237132 秒级时间戳转可读时间 Wed Nov 5 14:38:52 CST 2025
date -d @$((1762237132123/1000)) 毫秒级时间戳转可读时间(先除1000) Wed Nov 5 14:38:52 CST 2025
date -d "2025-11-05 14:30:00" +"%s" 可读时间转秒级时间戳 1762236600

2. 相对时间计算

命令 功能 示例输出
date -d "+1 day" 1天后的当前时间 Thu Nov 6 14:30:25 CST 2025
date -d "-2 hours" 2小时前的时间 Wed Nov 5 12:30:25 CST 2025
date -d "next Monday" 下周一的当前时间 Mon Nov 10 14:30:25 CST 2025
date -d "last month +5 days" 上个月加5天的时间 Tue Oct 10 14:30:25 CST 2025

系统时间设置(需 root 权限)

命令 功能 说明
sudo date -s "2025-11-05 15:00:00" 同时设置日期和时间 需输入管理员密码
sudo date -s "2025-11-06" 单独设置日期(时间不变) -
sudo date -s "15:30:00" 单独设置时间(日期不变) -
sudo hwclock -w 将系统时间同步到硬件时钟 避免重启后时间失效

跨时区查看

命令 功能 示例输出
TZ=UTC date 查看 UTC 时间 Wed Nov 5 06:30:25 UTC 2025
TZ=America/New_York date 查看纽约时间(美东时区) Wed Nov 5 02:30:25 EDT 2025
TZ=Europe/London date 查看伦敦时间(西欧时区) Wed Nov 5 07:30:25 GMT 2025
TZ=Asia/Tokyo date 查看东京时间(日本时区) Wed Nov 5 15:30:25 JST 2025

总结

date 命令的核心价值是灵活查看和控制系统时间,日常高频用法:

  • 查看默认时间:date
  • 自定义格式(日志/脚本用):date +"%Y-%m-%d %H:%M:%S"
  • 时间戳转换:date -d @时间戳
  • 相对时间计算:date -d "+3 days"
  • 设置时间(需 root):sudo date -s "日期时间"

如需更多格式符或功能,可通过 man date 查看完整手册(系统内置帮助)。

posted @ 2025-11-05 10:09  【唐】三三  阅读(4)  评论(0)    收藏  举报