Linux:通过命令行设置日期


75

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

我想改变:

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

2
您可以使用例如date --set='-2 years'将时钟倒退两年,而使所有其他元素都相同。您可以用相同的方式更改月份和月份。我尚未检查如果该计算导致的日期时间实际上不存在,例如在DST切换期间会发生什么,但是该行为应与通常的“将日期和时间都设置为具体值”的行为相同。
Christian Severin

假设您尝试将日期设置为当前时间,则可以sudo ntpd -gq使用ntp服务自动更新系统。
史蒂文·索罗卡

Answers:


94

用途date -s

date -s '2014-12-25 12:34:56'

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

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

date -s "2014-12-25 $(date +%H:%M:%S)"

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


我不想更改时间
SHW 2014年

5
别无选择。但是,您可以使用date -s "2014-12-25 $(date +%H:%M:%S)"更改日期并重用当前时间。
Michael Homer 2014年

来到这里,小时和分钟都与当前时间匹配。–不错
Alex2php '18

2
date: cannot set date: Invalid argument
克里斯·斯特里钦斯基

@MichaelHomer @SHW可以使用像这样的命令仅更改日期date -s 2018-01-01。有人在回答中也分享了这一点:superuser.com/questions/870068/...
baptx

42

系统时间

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

仅设置年份:

date -s 'next year'
date -s 'last year'

仅设置月份:

date -s 'last month'
date -s 'next month'

仅设置日期:

date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'

一起设置:

date -s '2009-02-13 11:31:30' #that's a magical timestamp

硬件时间

现在已经设置了系统时间,但是您可能需要将其与硬件时钟同步:

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

hwclock --show

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

hwclock --systohc

还是系统时间到硬件时钟

hwclock --hctosys

2
奖金点是通过示例来说明设置日期的非显而易见的方法,以及指出“系统时间”和“硬件时钟”之间的差异。很有帮助的答案!
马克·爱丁顿

3

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

# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014

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

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

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

日期格式为:

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

我尝试更改,但未更改:-$ sudo date --set =“ 2015-09-30 10:05:59.990” Wed Sep 30 10:05:59 +0530 2015 $ date Thu May 23 15:10:37 +0530 2019
维诺德

2

对于像我这样运行ESXI 5.1的用户,这是系统回答我的内容

~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'

我不得不使用特定的ESX命令代替:

esxcli system time set  -y 2016 -M 03 -d 23  -H 10 -m 05 -s 00

3
感谢-1,但您介意解释原因吗?如果您有更好/更完整/更准确的答案,请随时发表评论。
Balmipour

1

更改系统日期的命令为date

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

   date [OPTION]... [+FORMAT]
   date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

简单

最简单的方法是使用,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

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

 $ sudo date -s yesterday; date
 Sat Jan  5 07:21:07 EST 2019
 Sat Jan  5 07:21:07 EST 2019

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

 $ 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

绝对日期更加复杂,因为它们需要更多详细信息:

 $ date -s "2001-07-23 10:11:12"

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

 $ date -s "$(date +'%Y-%m-%d %H:%M:%S')"

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

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

直接

第二个日期呼叫表单用于直接更改系统日期。

 date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

因此:

 date 11230812              # MMDDhhmm

将日期设置为11月23日的08h和12min。

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

或者,如果您实际上想更改日期,请以root用户身份:

 # date 11230812
 # date
 Sat Nov 23 08:12:00 EST 2019

请注意,诸如NTP或chrony之类的服务将受到影响。并且,如果重新启动会将日期重置为真实日期。

添加YY以设置年份:

 $ date 1123081222
 date: cannot set date: Operation not permitted
 Wed Nov 23 08:12:00 EST 2022

或CCYY设置年份世纪:

 $ date 112308121982
 date: cannot set date: Operation not permitted
 Tue Nov 23 08:12:00 EST 1982

-1

我使用下面列出的date命令和时间格式从在使用Linux Kernal的Android Things上执行的terminal shell命令成功设置了日期。

日期092615002017.00

MMDDHHMMYYYY.SS

MM-月-09

DD-天-26

HH-小时-15

MM-最小-00

YYYY-年-2017

.SS-秒-00


由于这不适用于GNU或BSD date,请您添加更多有关此系统与之相关的系统以及与该特定问题的相关性的更多信息。
库沙兰丹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.