Linux:通过命令行设置日期

SHW*_*SHW 94 linux date clock

如何在 Linux 中更改系统日期?

我想改变:

  • 仅年
  • 仅一个月
  • 仅日期
  • 以上三者的任意组合

Mic*_*mer 124

使用date -s

date -s '2014-12-25 12:34:56'
Run Code Online (Sandbox Code Playgroud)

以 root 或 under 运行它sudo。仅更改年/月/日中的一个更具挑战性,并且将涉及重复当前日期的位。主要桌面环境中还内置了 GUI 日期工具,通常通过时钟访问。

要仅更改部分时间,您可以在日期字符串中使用命令替换:

date -s "2014-12-25 $(date +%H:%M:%S)"
Run Code Online (Sandbox Code Playgroud)

将更改日期,但保留时间。见man date格式化信息来构建其他组合:单个组件%Y%m%d%H%M,和%S

  • 没有选择这样做。不过,您可以使用`date -s "2014-12-25 $(date +%H:%M:%S)"` 来更改日期并重用当前时间。 (7认同)
  • `日期:无法设置日期:无效参数` (3认同)

cha*_*aos 49

系统时间

您可以使用date来设置系统日期。的 GNU 实现date(在大多数非嵌入式基于 Linux 的系统上可以找到)接受许多不同的格式来设置时间,这里有几个例子:

只设置年份:

date -s 'next year'
date -s 'last year'
Run Code Online (Sandbox Code Playgroud)

只设置月份:

date -s 'last month'
date -s 'next month'
Run Code Online (Sandbox Code Playgroud)

只设置一天:

date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'
Run Code Online (Sandbox Code Playgroud)

一起设置:

date -s '2009-02-13 11:31:30' #that's a magical timestamp
Run Code Online (Sandbox Code Playgroud)

硬件时间

现在系统时间已设置,但您可能希望将其与硬件时钟同步:

使用--show打印硬件时间:

hwclock --show
Run Code Online (Sandbox Code Playgroud)

您可以将硬件时钟设置为当前系统时间:

hwclock --systohc
Run Code Online (Sandbox Code Playgroud)

或者系统时间到硬件时钟

hwclock --hctosys
Run Code Online (Sandbox Code Playgroud)

  • 用于说明您可以通过示例设置日期的非明显方式以及指出“系统时间”和“硬件时钟”之间的差异的奖励积分。非常有帮助的答案! (2认同)

ImH*_*ere 6

更改系统日期的命令是date

有两种方法可以调用 date 命令(在 Linux 中):

   date [OPTION]... [+FORMAT]
   date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Run Code Online (Sandbox Code Playgroud)

简单

最简单的方法是使用,date -s因为它允许使用简单的 相对日期

 $ date -s yesterday; date
 date: cannot set date: Operation not permitted
 Sat Jan  5 07:21:07 EST 2019
 Sun Jan  6 07:21:07 EST 2019
Run Code Online (Sandbox Code Playgroud)

日期没有改变,因为它是由有限的用户执行的$。如果您确实希望更改日期,请使用 root ( #) 或 sudo:

 $ sudo date -s yesterday; date
 Sat Jan  5 07:21:07 EST 2019
 Sat Jan  5 07:21:07 EST 2019
Run Code Online (Sandbox Code Playgroud)

因此,更改相对日期的任何部分就像命名它一样简单:

 $ date -s "5 years ago"
 Mon Jan  6 08:26:26 EST 2014

 $ date -s "+6 months"
 Sat Jul  6 08:28:39 EDT 2019

 $ date -s "+3 hours -13 minutes"
 Sun Jan  6 11:16:59 AST 2019
Run Code Online (Sandbox Code Playgroud)

绝对日期有点复杂,因为它们需要更多细节:

 $ date -s "2001-07-23 10:11:12"
Run Code Online (Sandbox Code Playgroud)

或者,您可以两次使用 date 命令:

 $ date -s "$(date +'%Y-%m-%d %H:%M:%S')"
Run Code Online (Sandbox Code Playgroud)

%有效值替换任何一个,日期将被设置(仅作为 root)。

 $ date -s "$(date +'%Y-11-%d %H:%M:%S')"
 Wed Nov  6 08:37:15 EST 2019
Run Code Online (Sandbox Code Playgroud)

直接的

第二个日期调用表用于直接更改系统日期。

 date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Run Code Online (Sandbox Code Playgroud)

所以 :

 date 11230812              # MMDDhhmm
Run Code Online (Sandbox Code Playgroud)

将日期设置为 11 月 23 日 08 点 12 分。

BSD 有一个类似的命令,但格式不同([[[[[cc]yy]mm]dd]HH]MM[.ss])。

date以受限用户身份尝试看看它会做什么(不做任何更改):

 $ date 11230812
 date: cannot set date: Operation not permitted
 Sat Nov 23 08:12:00 EST 2019
Run Code Online (Sandbox Code Playgroud)

或者,如果您确实想更改日期,请以 root 身份:

 # date 11230812
 # date
 Sat Nov 23 08:12:00 EST 2019
Run Code Online (Sandbox Code Playgroud)

请注意,NTP 或 chrony 等服务将受到影响。而且,如果重新启动会将日期重置回真实日期。

添加一个YY来设置年份:

 $ date 1123081222
 date: cannot set date: Operation not permitted
 Wed Nov 23 08:12:00 EST 2022
Run Code Online (Sandbox Code Playgroud)

或 CCYY 来设置年份世纪:

 $ date 112308121982
 date: cannot set date: Operation not permitted
 Tue Nov 23 08:12:00 EST 1982
Run Code Online (Sandbox Code Playgroud)


gar*_*Red 5

您可以使用命令更改日期date。但是,该命令需要完整的日期作为参数:

# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014
Run Code Online (Sandbox Code Playgroud)

要更改部分日期,请输出当前日期以及要更改的日期部分作为字符串,并将所有其他部分作为日期格式变量输出。然后将其传递给date -s命令来设置它:

# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014
Run Code Online (Sandbox Code Playgroud)

将月份更改为第 12 个月 - 12 月。

日期格式为:

  • %Y- 年
  • %m- 月
  • %d- 天
  • %H- 小时
  • %M- 分钟