从互联网更新时间和日期的命令是什么?

更新时间和日期的命令是什么?有没有可以通过应用程序界面而不是通过Shell来完成的应用程序?

你能确定你正在使用的Ubuntu版本吗? - david6
1你需要非常准确的时间吗?(如果是的话,你需要熟悉ntpq并选择时间服务器)。如果你只是想要大致正确的时间,那么请尝试:系统设置 >> 时间和日期,并检查'设置时间'是否设置为'自动从互联网获取'. - david6
如果你希望时间始终非常准确,可以安装ntpd。这是一个在后台运行的小进程,会不断地调整时间而不是突然跳变,但它会占用一些资源。 - strugee
与时间服务器同步时间 - LF00
值得注意的是,自2018年起情况发生了变化,对于最近版本的Ubuntu来说,前面提到的顶级答案已经不再正确。您可能需要参考这个答案:https://askubuntu.com/a/998449/53783 - Niels Abildgaard
sudo ntpd 应该足够了。 - forzagreen
1这个问题现在非常重要。最近变得非常棘手:一些个人电脑使用chrony或ntpd,它们总是找到一个理由不更新时间(时钟太不准确、与win双启动相关的问题、ntp可能也会拒绝信任没有互联网的时钟源)。此外,如果你的个人电脑有互联网但时钟不准确,由于现在浏览器和网站强制使用HTTPS,它将被阻止,因为你的时钟不准确,甚至无法搜索如何修复它!如果有一个回答能解决所有情况,那将是很好的。现在,“手动设置时钟”是最可靠的方法... - bct
这个回答是否解决了你的问题?如何使用NTP强制进行时钟更新? - T.Todua
12个回答

这是一个我找到的不错的小代码,用于在您遇到ntp问题时更新您的时间。
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"

1好的解决方案! - Farid Rn
非常好,对我有用。 - Janderson Silva
11这应该是被接受的答案! - brijs
这段片段已经进入了我的武器库!;) - Dave Amit
疯狂,但有效! - wordsforthewise
对我来说,这也是解决办法。 - desmond13
2可以工作,但我有一个问题。这个命令将时钟设置为GMT时间,而不是本地时间。有没有解决办法? - samarth-kashyap
3这个很好,但通常会有8到50毫秒的延迟,因为它本身不进行同步。 - Nonny Moose
1@gksamarth 这个命令确实为我设置了正确的时区(我目前是GMT+2) - Arnaud P
这对我有用,有人知道一个不需要sudo的等效命令吗?我想把它放在.bashrc文件中,以便在我打开每个终端时都执行。 - desmond13
我喜欢这个答案,因为它与我在一个具有WebKit但没有NTP的STB上使用的方法相似!我们实际上使用了XMLHttpRequest而不是wget。我们还必须在WebKit端口中构建一个JS扩展,以便它可以根据我们从HTTP头解析出的时间来设置时间。它必须要相当准确,而这正是我们得到的结果。我刚刚尝试了wget版本,但我所拥有的wget没有配置https,所以它没有起作用。 - cardiff space man
2这个解决方案是有效的,但与NTP相比不要期望它的准确性。这种方法只是向google.com发送一个HTTP请求并同步本地日期。而NTP远不止于此:https://datatracker.ietf.org/doc/html/rfc5905 - logoff

你可以通过例如sudo ntpdate time.nist.gov来进行操作。其他服务器包括time.windows.com等等。 http://www.pool.ntp.org/列出了世界各地的时间服务器。

6我遇到了一个错误:“NTP套接字正在使用中,正在退出”。 - friederbluemle
7此答案所述,您需要停止ntp服务 sudo service ntp stop。然后,您可以使用答案中建议的命令,最后可以使用 sudo service ntp start 重新启动服务。 - Michele
这个方法可以用,但是它不能自动更新任务栏上的时钟。 - posfan12
6我遇到了一个错误信息:“ntpdate[15806]: no server suitable for synchronization found”。下面的第二个答案使用google.com效果更好。 - Kim Stacks
8ntpdate: 命令未找到 - rogerdpack
6如果你想使用nptdate,但找不到它,那么请执行sudo apt install ntpdate;请注意,它不再默认安装,并且在最新版本的Ubuntu中可能不再是首选解决方案;请参考https://help.ubuntu.com/community/UbuntuTime,并查看https://askubuntu.com/questions/254826/how-to-force-a-clock-update-using-ntp以获取更多选项(以及其他回答此问题的答案)。 - michael
6 Nov 19:55:16 ntpdate[8504]: no server suitable for synchronization found - chovy
答案已过时,截至两年前。 - dessalines
这个答案适用于在WSL下运行的Ubuntu 20.04。 - SO_fix_the_vote_sorting_bug

截至2018年,使用全新安装的Ubuntu 16.04 LTS,在运行sudo ntpdate time.nist.gov命令时会得到以下结果:
sudo: ntpdate: command not found

这是因为(官方来源):

ntpdate 被认为已过时,推荐使用 timedatectl,因此不再默认安装。

而现在要强制进行同步,请执行以下操作:

sudo timedatectl set-ntp off
sudo timedatectl set-ntp on

在我的情况下,我正在运行一个虚拟机上的Ubuntu,并保存了机器状态,所以当我再次启动实例时,它没有自动同步时钟,因为没有引发同步的启动事件。因此,时间仍然显示的是我上次运行虚拟机时的时间。

1我刚刚升级到Bionic版本,发现ntpdate不再工作了,但是timedatectl对我来说很有效。 - kapad
4对我来说也有效,在Ubuntu 18.04上。 - apaderno
1如果时间没有改变,请使用timedatectl检查您的时区。如果错误,请参考命令中的--help部分以了解如何更改它。 - Brad Turek
5Virtual Box真是个好东西,省了不少调试的麻烦! - Mohd Abdul Mujib
我在Ubuntu 20.04上遇到了这个错误:无法设置NTP:不支持NTP - Ryan
我得到了和@Ryan一样的东西。 - Loenix
1对我来说效果很好。 - Patrick S

在终端中运行此命令应该能解决问题。
sudo dpkg-reconfigure tzdata

你可以通过点击时钟并浏览选项来以图形方式添加额外的时区,我想。

时区并不完全等同于(准确的)时间。但是,也不太清楚Vikramjeet到底在问什么。 - david6
如何通过互联网更新时间和日期是这个问题,回答是sudo dpkg-reconfigure tzdata,那么有什么问题吗?关于时区的评论与我知道的唯一可能以图形方式进行相关。 - Jayo
我假定他们在这里说的“graphically”是指图形化(或者说是GUI)的方法,而不是地理上的(或者全球性的)。 - david6
我也是这样,我不知道有没有一种通过网络图形化更新日期和时间的方法,所以我使用终端。我知道如何图形化设置时区,关于时区的部分是我对如何以图形化方式影响时间的建议,据我所知,现在你明白了吗? - Jayo
这对我来说很有效,因为它确实更新了时间。 - ch271828n
这个更新会改变系统的时区,但不会改变日期。 - Loenix


6请不要使用其他网站的链接。当它们消失时,您发布的信息也会消失。通过回答链接的内容(并给予应有的信用),避免发生“链接腐败”。 - Rinzwind

大多数方法都不起作用,因为ntp会在几秒钟内覆盖您的设置。

您需要先禁用NTP。在Ubuntu上,可以这样做:

    # Disable ntp
    sudo timedatectl set-ntp 0

然后你可以做:
    # Set software clock 
    sudo date --set="2018-04-01 22:22:22"
    # Sync with hardware clock 
    sudo hwclock --systohc

我遇到了这个问题,因为我会暂停一个虚拟机一段时间,当我恢复时,Ubuntu 20.04会拒绝更新任何软件包,直到时间被纠正(即软件包不是来自“未来”)。
最简单的方法(通过终端)是运行以下命令:
sudo systemctl restart systemd-timesyncd

在Ubuntu的主要GNOME版本20.04上进行了测试。

无需单独命令来重新启动NTP。同时更新GNOME中报告的时间。

您可以将此添加到您的bash文件中:

synctime() {
  sudo systemctl restart systemd-timesyncd
}

重新加载您的bash文件(或打开一个新的终端)后,运行该命令。
synctime

它的效果非常好。 - omt66

dateFromServer=$(curl -v --silent https://google.com/ 2>&1 \
   | grep Date | sed -e 's/< Date: //'); date +"%d%m%Y%H%M%S" -d "$dateFromServer"

或者
date -s `curl -I 'https://startpage.com/' 2>/dev/null | grep -i '^date:' | sed 's/^[Dd]ate: //g'`

1通过与时间服务器连接来设置日期和时间的标准方式是使用NTP。为什么你要使用HTTPS连接来完成这个操作? - xiota
1有时候,我想说,拥有一种与标准方式不同的选择也是很好的。 - Nathan Basanese
4我的互联网服务提供商一直在封锁我的NTP服务器。 - Tyler

有没有任何应用程序可以让我在用户界面上完成这个操作,而不是通过命令行?我正在使用17.10版本,可以进入设置(从界面右上角的菜单)> 详细信息 > 日期和时间。在我的情况下,尽管“自动日期和时间”设置为“开启”,但我的系统并没有从互联网上更新。我只需将其改为“关闭”,等待一秒钟,然后再改回“开启”。它就会获取到当前的日期和时间,然后一切都正常了。

你需要安装 ntp 包。日期/时间设置可在系统设置中找到。这里有一些更多信息:这里

4链接已失效...正如Rinzwind所说:“请不要使用指向其他网站的链接。当它们消失时,您发布的信息也会消失。通过回答链接内容(并给予应有的荣誉)来防止‘链接腐烂’的发生。”谢谢 - Michele