Answers:
用途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
。
date -s "2014-12-25 $(date +%H:%M:%S)"
更改日期并重用当前时间。
date: cannot set date: Invalid argument
date -s 2018-01-01
。有人在回答中也分享了这一点:superuser.com/questions/870068/...
系统时间
您可以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
您可以使用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
-分钟更改系统日期的命令为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
date --set='-2 years'
将时钟倒退两年,而使所有其他元素都相同。您可以用相同的方式更改月份和月份。我尚未检查如果该计算导致的日期时间实际上不存在,例如在DST切换期间会发生什么,但是该行为应与通常的“将日期和时间都设置为具体值”的行为相同。