【Linux】有关时间的命令(date、timedatectl)

 专栏文章索引:Linux

有问题可私聊:QQ:3375119339

目录

 一、data命令

1.介绍

2.常用参数

3.常用选项

二、timedatectl命令

1.介绍

2.常用子命令


 一、data命令

1.介绍

date命令用于显示或设置系统的时间与日期,语法格式为:“ date [+指定的格式]”。

用户只需在强大的date命令后输入以“+”号开头的参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间信息结合到一起。例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2020-9-1.tar.gz”,用户只需要看一眼文件名称就能大概了解到每个文件的备份时间了。

2.常用参数

参数 作用
%S 秒(00~59 )
%M 分钟(00~59 )
%H 小时(00~23 )
%l 小时(00~12 )
%m 月份(1~12 )
%p 显示出AM或PM
%a 缩写的工作日名称(例如: Sun )
%A 完整的工作日名称(例如: Sunday )
%b 缩写的月份名称(例如:Jan )
%B 完整的月份名称(例如:January )
%q 季度( 1~4 )
%y 简写年份(例如∶20 )
%Y 完整年份(例如∶2020 )
%d 本月中的第几天
%j 今年中的第几天
%n 换行符(相当于按下回车键)
%t 跳格(相当于按下Tab键)
%V 显示当前日期的周数
  • 按照默认格式查看当前系统时间的date命令如下所示:
[user@redhathost20230911 ~]$ date
Sat Apr  6 20:33:36 CST 2024

中部标准时间(Central Standard Time,CST)是世界上一个广泛使用的时区之一,主要用于北美和中美洲的一些地区。

  • 按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间的date命令如下所示:
[user@redhathost20230911 ~]$ date "+%Y-%m-%d %H:%M:%S"
2024-04-06 20:43:51
  • date命令中的参数%j可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的新旧,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示:
[root@redhathost20230911 ~]# date "+%j"
097

3.常用选项

选项 功能
-s 设置系统的日期和时间
  • -s

将系统的当前时间设置为2025年10月11日1点35分30秒的date命令如下所示:

有两种方法:

1.月日时分年点秒

[root@redhathost20230911 ~]# date 101101352025.30
Sat Oct 11 01:35:30 CST 2025

2.-s

[root@redhathost20230911 ~]# date -s "2025-10-11 1:35:30"
Sat Oct 11 01:35:30 CST 2025

二、timedatectl命令

1.介绍

timedatectl 命令用于设置系统的时间,英文全称为: “time date control” ,语法格式为: “timedatectl [参数 ]”
发现电脑时间跟实际不符?如果只差几分钟的话,我们可以直接调整,但如果差几个小时,那么除了调 整当前的时间,还有必要检查下时区了。

2.常用子命令

  • 查看系统时间与时区:
[root@redhathost20230911 ~]# timedatectl status
               Local time: Sat 2024-04-06 21:57:22 CST
           Universal time: Sat 2024-04-06 13:57:22 UTC
                 RTC time: Sat 2024-04-06 13:57:22
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
  • 如果您查到的时区不是上海(Asia/Shanghai),可以手动进行设置:
[root@redhathost20230911 ~]# timedatectl set-timezone Asia/Shanghai 
  • 如果时间还是不正确,我们可以手动的修改系统日期:
[root@redhathost20230911 ~]# timedatectl set-time 2024-04-06
Failed to set time: NTP unit is active

看起来在您的系统上,NTP(Network Time Protocol)单元处于活动状态,这可能会阻止您手动设置时间。NTP是一种用于同步计算机系统时间的协议,通常用于确保计算机的时间与全球标准时间保持同步。

您可以尝试停止NTP服务后再手动设置时间。以下是在大多数Linux系统上停止NTP服务的命令:

systemctl stop ntp

停止NTP服务后,您可以再次尝试使用 timedatectl set-time 命令来手动设置时间。完成设置后,您可以选择重新启动NTP服务以确保系统时间的持续同步。

请注意,在进行此类更改之前,请确保您了解其可能对系统和应用程序的影响,并在必要时备份重要数据。

  • 而如果想修改时间的话,也很简单:
timedatectl set-time 9:30
  • localectl set-locale LANG=en_US

localectl 命令用于控制系统的地区设置,包括语言环境(locale)。通过设置合适的语言环境,您可以确保系统中显示的文本和消息以及日期、时间等格式符合您的偏好和语言习惯。

在您提供的命令中,您试图将系统的语言环境设置为英文(美国)。这意味着系统将使用英文作为默认的语言环境,以及日期、时间等格式。

命令 localectl set-locale LANG=en_US 用于将语言环境设置为英文(美国)。请注意,这将更改整个系统的语言环境设置,包括系统消息、用户界面等。

三、练习

1.题目

  1. 使用date命令显示当前的日期和时间。

  2. 使用date命令将当前日期和时间格式化为YYYY-MM-DD HH:MM:SS的形式。

  3. 使用date命令显示当前月份的日历。

  4. 使用date命令将系统时间设置为指定的日期和时间。

  5. 使用date命令计算两个日期之间的天数差。

  6. 使用date命令显示当前时区。

  7. 使用date命令显示当前日期的Unix时间戳。

  8. 使用date命令显示当前日期的年份。

  9. 使用date命令将日期和时间转换为指定格式。

  10. 使用date命令显示当前日期的周数。

2.参考答案

  1. 使用date命令显示当前的日期和时间。
    [root@redhathost20230911 ~]# date
    Sun Apr  7 08:56:51 CST 2024
    [root@redhathost20230911 ~]# 
  2. 使用date命令将当前日期和时间格式化为YYYY-MM-DD HH:MM:SS的形式。

    [root@redhathost20230911 ~]# date "+%Y-%m-%d %H:%M:%S"
    2024-04-07 08:59:44
    [root@redhathost20230911 ~]# 
  3. 使用date命令显示当前月份的日历。

    [root@redhathost20230911 ~]# date +%m
    04
    [root@redhathost20230911 ~]# 
    
  4. 使用date命令将系统时间设置为指定的日期和时间。

  5. 使用date命令计算两个日期之间的天数差。

  6. 使用date命令显示当前时区。

    [root@redhathost20230911 ~]# date +%Z
    CST
    [root@redhathost20230911 ~]# 
    

    全球共有24个主要时区,它们基于经度划分,并相对于协调世界时(UTC)的时间偏移量可能不同。以下是一些主要的时区:

    UTC-12: 国际日期变更线西侧时区。
    UTC-11: 萨摩亚时区、美国萨摩亚群岛时区。
    UTC-10: 夏威夷标准时间、阿拉斯加-夏威夷标准时间。
    UTC-9: 阿拉斯加标准时间。
    UTC-8: 太平洋标准时间、美国和加拿大时区、西部标准时间。
    UTC-7: 山地标准时间、美国和加拿大时区、山地夏令时。
    UTC-6: 中部标准时间、墨西哥标准时间。
    UTC-5: 东部标准时间、西印度群岛时间。
    UTC-4: 大西洋标准时间、委内瑞拉标准时间。
    UTC-3: 亚马逊标准时间、阿根廷标准时间。
    UTC-2: 南乔治亚岛和南桑威奇群岛时间。
    UTC-1: 佛得角标准时间、佛得角夏令时间。
    UTC: 协调世界时、格林威治标准时间。
    UTC+1: 中欧时间、西非时间。
    UTC+2: 东欧时间、中部非洲时间。
    UTC+3: 东非时间、阿拉伯标准时间。
    UTC+4: 迪拜标准时间、莫斯科标准时间。
    UTC+5: 巴基斯坦标准时间、马尔代夫时间。
    UTC+6: 孟加拉标准时间、不丹时间。
    UTC+7: 印度尼西亚西部时间、柬埔寨时间。
    UTC+8: 中国标准时间、澳大利亚西部标准时间。
    UTC+9: 日本标准时间、韩国标准时间。
    UTC+10: 澳大利亚东部标准时间、关岛标准时间。
    UTC+11: 所罗门群岛时间、诺福克岛时间。

    请注意,一些地区可能会在夏季实行夏令时,时区偏移量可能会因此而改变。

    系统显示的时区是CST。CST通常指代的是中国标准时间,位于UTC+8时区。但需要注意的是,CST也可以指代其他时区,如美国中部标准时间(Central Standard Time)。无法确定具体是哪个CST时区。

  7. 使用date命令显示当前日期的Unix时间戳。

    [root@redhathost20230911 ~]# date +%s
    1712452726
    [root@redhathost20230911 ~]# 

    时间戳是一种表示日期和时间的方式,通常以秒数的形式表示自1970年1月1日00:00:00 UTC以来的时间间隔。这个特定的时间点被称为UNIX纪元(Unix Epoch),是计算机系统中广泛使用的时间起点。

    使用时间戳的主要优势是它们是与时区无关的,因为它们是以UTC时间为基础的。这使得时间戳在跨越不同的时区或在计算机系统中进行时间计算时非常方便。

    Unix时间戳是一种常见的时间表示方法,在许多编程语言和操作系统中都有内置支持。它被广泛用于记录文件的创建时间、处理时间相关的数据、计算时间间隔等各种场景。

  8. 使用date命令显示当前日期的周数。

    [root@redhathost20230911 ~]# date +%V
    14
    [root@redhathost20230911 ~]# 
    

    date +%V命令所使用的周数是ISO 8601标准中定义的周数。根据ISO 8601标准,每年的第一周是包含该年的第一个星期四的周。因此,周数是从该年的第一个星期四开始计算的。


上一篇:js 求出对应年月的开始日期和结束日期