0

0

如何在Linux中查看系统时间 Linux date时间格式化

P粉602998670

P粉602998670

发布时间:2025-09-06 08:12:03

|

1062人浏览过

|

来源于php中文网

原创

答案是使用date命令及其格式化选项可自定义时间显示格式,并通过hwclock和timedatectl管理硬件时间与系统时间同步。具体来说,date命令支持多种格式符如%Y、%m、%d等,可组合输出所需时间格式,结合+号与单引号实现精确控制,如date +'%Y-%m-%d %H:%M:%S';同时可用%F、%T等简写格式或%s获取Unix时间戳;系统时间由内核维护,硬件时间由RTC芯片保存,启动时系统读取硬件时间初始化自身,关机前通常将准确的系统时间写回硬件;通过sudo hwclock --show查看硬件时间,sudo hwclock --systohc或--hctosys进行双向同步;为保持时间精确,应配置NTP网络时间同步,并使用timedatectl设置正确时区,避免日志混乱、证书失效等问题。

如何在linux中查看系统时间 linux date时间格式化

在Linux系统里,想要知道现在是几点几分,或者更进一步,想把时间按照自己特定的格式打印出来,最直接也最强大的工具就是

date
命令。它不光能显示当前系统时间,更厉害的是,它能灵活地按你想要的任何格式输出,这在很多时候,比如日志记录、文件名生成或者脚本处理时,简直是神器。

解决方案

其实,

date
命令的基础用法非常简单,你只需要在终端里敲下
date
,它就会立刻把当前的日期和时间显示出来。

date

输出大概是这样的:

Thu Nov 16 10:30:45 AM CST 2023

但如果只是这样,那它也称不上强大。

date
命令的真正魅力在于它的格式化能力。通过在命令后面加上
+
号和特定的格式代码,你就能完全掌控时间的显示方式。

比如,我想显示成

年-月-日 时:分:秒
这种我们最常见的格式:

date +'%Y-%m-%d %H:%M:%S'

输出就会是

2023-11-16 10:30:45
。是不是一下子就规整多了?

这些格式代码其实有很多,每个都代表了时间的不同组成部分:

  • %Y
    : 四位年份 (e.g., 2023)
  • %m
    : 两位月份 (01-12)
  • %d
    : 两位日期 (01-31)
  • %H
    : 24小时制的小时 (00-23)
  • %m
    : 分钟 (00-59)
  • %S
    : 秒 (00-59)
  • %w
    : 星期几 (0-6,0是星期日)
  • %a
    : 星期几的缩写 (Mon, Tue...)
  • %a
    : 星期几的全称 (Monday, Tuesday...)
  • %F
    : 等同于
    %Y-%m-%d
  • %T
    : 等同于
    %H:%M:%S

我个人最常用的是

%F %T
的组合,因为简洁又符合日常习惯。有时候为了精确到毫秒,还会用到
%N
(纳秒),然后自己截取前几位。

date +'%Y-%m-%d %H:%M:%S.%N' # 输出带纳秒的时间

这在需要非常精细的时间戳时特别有用,比如在一些性能测试或日志追踪场景里。当然,你也可以查看过去或未来的时间,这需要用到

--date
选项,但今天我们主要聚焦在查看和格式化当前时间上。

有时候,你可能会遇到一些特殊的字符,比如

%
本身,或者需要输出一个固定的字符串。这时候,单引号
''
就显得尤为重要,它能把你的格式字符串整体包起来,避免shell误解。如果你想在格式里直接输出一个百分号,就用
%%
。这些小细节,刚开始用的时候可能会踩坑,但习惯了就好。

如何自定义
date
命令的输出格式,满足你的个性化需求?

说实话,

date
命令的格式化能力远超我们日常想象。我记得有一次,需要给一个自动化脚本生成一个文件名,格式要求是
项目名_YYYYMMDD_HHMM.log
,当时我就是用
date +'%Y%m%d_%H%M'
轻松搞定。这种自定义能力,在很多场景下都特别实用。

除了上面提到的那些基础格式符,

date
命令还支持一些更高级或者说更‘语义化’的格式。比如:

  • %d
    : 直接输出
    MM/DD/YY
    格式。
  • %r
    : 输出12小时制时间
    HH:MM:SS AM/PM
  • %S
    : 输出自Unix纪元(1970-01-01 00:00:00 UTC)以来的秒数,这个在计算时间差或者作为唯一时间戳时特别有用,很多系统内部时间戳都是这个格式。
  • %Z
    : 输出时区名称 (e.g., CST)。
  • %Z
    : 输出时区偏移量 (e.g., +0800)。

举个例子,如果你想知道当前是Unix时间戳多少,直接:

date +%s

这会返回一个长串数字,代表从1970年1月1日到现在的总秒数。我个人在做一些跨平台或者需要精确时间对比的时候,特别喜欢用这个,因为它不受时区影响,是个绝对时间点。

Moshi Chat
Moshi Chat

法国AI实验室Kyutai推出的端到端实时多模态AI语音模型,具备听、说、看的能力,不仅可以实时收听,还能进行自然对话。

下载

再比如,如果我想在日志里同时记录本地时间、时区以及Unix时间戳,我可以这样组合:

date +'%Y-%m-%d %H:%M:%S %Z (%z) | Unix timestamp: %s'

输出可能就是:

2023-11-16 10:45:30 CST (+0800) | Unix timestamp: 1700102730
。你看,一次命令就能把所有关键信息都拎出来,省去了多次查询的麻烦。这种灵活性,真的让我在处理时间相关任务时省了不少心。当然,格式符太多了,没必要全部记住,用到的时候查一下手册(
man date
)或者网上搜一下,效率更高。

Linux系统时间与硬件时间,它们之间有什么微妙的关系?

在Linux系统里,时间这东西其实有点‘两面派’。我们通常说的‘系统时间’(System Time),是内核维护的,你用

date
命令看到的就是它。这个时间是软件层面的,一旦系统启动,它就开始计时,并且可以随时被修改。

而另一面,是‘硬件时间’(Hardware Clock),也叫RTC(Real Time Clock)。它通常是主板上的一个独立芯片,由一个小电池供电,即使电脑关机了,它也能继续走字。你可以把它理解成你电脑主板上那个‘小手表’。

它们之间的关系是这样的:

  1. 启动时同步: 系统启动时,Linux内核会读取硬件时间,然后用它来初始化系统时间。
  2. 运行时独立: 一旦系统时间被初始化,它就独立运行了。系统时间的精度更高,而且可以通过NTP(网络时间协议)服务进行网络同步,保持精确。硬件时间相对来说精度差一些,而且通常不会自动同步。
  3. 关机前更新: 在系统正常关机时,系统时间通常会回写到硬件时间,以确保下次启动时硬件时间是准确的。

我个人在工作中,就遇到过因为硬件时间不准导致系统启动后时间混乱的问题。比如,服务器突然断电重启,硬件时间因为电池没电或者设置问题不准,导致系统启动后日志时间都乱七八糟,排查问题简直是噩梦。

要查看硬件时间,我们通常会用到

hwclock
命令:

sudo hwclock --show

(注意,

hwclock
通常需要root权限,所以前面加
sudo
。)

如果你想把系统时间同步到硬件时间,或者反过来:

  • 将系统时间写入硬件时间:
    sudo hwclock --systohc
  • 将硬件时间写入系统时间:
    sudo hwclock --hctosys

通常情况下,我们更倾向于让系统时间通过NTP保持精确,然后在关机时将这个精确的系统时间回写给硬件时间。这样,即使系统因为某些原因启动时无法立即同步NTP,也能有一个相对准确的初始时间。理解这两者的区别和联系,对于维护系统时间的准确性至关重要,尤其是在服务器环境里,时间不准可能导致证书失效、日志混乱、甚至分布式系统间通信故障等一系列问题。

除了显示,我们如何确保Linux系统时间始终保持精确和同步?

光会看时间可不够,更重要的是要让它准。想象一下,如果服务器时间不准,你的日志文件时间戳是错的,或者加密证书因为时间问题失效,那可真是要命。我曾经就因为一个测试环境的时钟漂移问题,排查了整整一个下午,最后发现是NTP服务没配好。

在Linux中,确保时间精确主要有两个方面:时区设置网络时间同步

1. 时区设置: 时区这东西,直接影响你

date
命令输出的本地时间。系统默认的时区可能不是你所在的地区,所以调整它非常关键。

  • 查看当前时区:
    timedatectl

    这个命令会显示很多时间相关的信息,包括当前时区。或者直接看

    /etc/localtime
    这个文件指向哪里,或者看
    /etc/timezone
    文件内容。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

319

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

229

2023.10.07

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

248

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

205

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1435

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

609

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

547

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

539

2024.04.29

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.3万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号