我通过将 zoneinfo 文件复制到/etc/localtime
,将 Linux 机器上的时区设置为 GMT+6 ,但该date
命令仍将时间显示为UTCtime-6
. 任何人都可以向我解释这种行为吗?
我假设date
命令应该显示UTCtime+6
时间。以下是我正在执行的步骤:
date
Wed Jan 22 17:29:01 IST 2014
date -u
Wed Jan 22 11:59:01 UTC 2014
cp /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime
date
Wed Jan 22 05:59:21 GMT+6 2014
date -u
Wed Jan 22 11:59:01 UTC 2014
Run Code Online (Sandbox Code Playgroud) 我有一个运行时区设置为的服务器UTC
。这似乎是一种很好的做法(如果我错了,请纠正我)。
无论如何,为了scp
文件,我连接到的其中一台服务器正在运行EDT
并存储我需要以格式复制的文件/path/to/filename/data20120913
我看着尝试rsync
使用类似 find-mtime -1
标志的文件来处理最后一天修改的文件,但我没有任何运气。
我不介意只scp
用来复制当天的文件,但截至目前,有一个 4 小时的窗口,在date +%Y%m%d
该窗口中运行将在每个服务器上提供不同的一天,这让我有点烦恼。
仔细man date
查看,我看到我可以将时间输出为UTC
,但我没有看到将其输出为另一个时区的方法,例如EDT
我想我也可以使用类似GNU
日期扩展的东西date -d 20100909 +%s
来从纪元以秒为单位获取日期,应用手动4 * 60 * 60
秒计算,然后查看将其渲染为日期 - 但是当夏令时开始时,它仍然需要一个小时.
是否有一种更简单的方法可以在设置YYYYMMDD
为EDT
的服务器上以格式输出日期UTC
?
今天,我的时钟自动调整为夏令时,来自 crontab 的脚本开始失败。我查看了发生了什么,并显示了以下错误LC_ALL=C
:
日期:无效日期“2016-10-16”
我认为最好只是重新启动系统,但现在我已经重新启动,错误仍然出现:
$ date -d '2016-10-15'
Sat Oct 15 00:00:00 BRT 2016
$ date -d '2016-10-16'
date: data inválida “2016-10-16”
$ date -d '2016-10-17'
Mon Oct 17 00:00:00 BRST 2016
Run Code Online (Sandbox Code Playgroud)
什么可能导致这种情况?
我可以使用什么命令来检查时区文件的内容,例如/etc/localtime
或 下的文件/usr/share/zoneinfo/*
?
洛杉矶的当前时间是 18:05。但是当我运行时TZ=UTC-8 date --iso=ns
,我得到:
2013-12-07T10:05:37,788173835+0800
Run Code Online (Sandbox Code Playgroud)
日期实用程序告诉我时间是 10:05,甚至说它报告为 UTC+8。为什么?
当我跑步时,date +"%Y%m%d%H%M%S"
我20171225203309
在 CET 时区收到这里。
我可以用date
相同的格式获取当前时间,但对于时区 GMT 吗?
为了我自己的理智,我正试图让程序在当地时间登录。
我已经更新了我的时区:
dpkg-reconfigure tzdata
Run Code Online (Sandbox Code Playgroud)
但该命令的结果是:
Current default time zone: 'Australia/Adelaide'
Local time is now: Mon May 20 03:09:52 UTC 2013.
Universal Time is now: Mon May 20 03:09:52 UTC 2013.
Run Code Online (Sandbox Code Playgroud)
注意UTC在Local time
这可能是什么原因?
我已经做了很多谷歌搜索,但我的问题似乎与所有人不同:(
以下是更多详细信息:
# cat /etc/timezone
Australia/Adelaide
# date
Mon May 20 03:41:06 UTC 2013
# export TZ='Australia/Adelaide'; date
Mon May 20 13:16:11 CST 2013
Run Code Online (Sandbox Code Playgroud)
export TZ='Australia/Adelaide';
在bash 会话中默认设置我的/etc/profile
使date
工作但不更改系统日志日期(重新启动服务后)
编辑:
# ls -l /etc/localtime
lrwxrwxrwx 1 root root 20 May 10 …
Run Code Online (Sandbox Code Playgroud) 当我运行时:
TZ=Asia/Kolkata date --date="1/1/1906"
Run Code Online (Sandbox Code Playgroud)
我得到:
date: invalid date ‘1/1/1906’
Run Code Online (Sandbox Code Playgroud)
在这里我可以找到一篇很好的文章: 加尔各答时间
但混淆也来自于 1905 年是一个有效日期这一事实。只有 1906 年不是。任何线索为什么?
我的雇主位于欧洲(CET),因此我们使用夏令时,这需要每年两次来回移动一个小时。我们的服务器在不同位置的云中运行。设置所有基础设施的员工已经消失了。他决定使用 UTC 作为所有服务器上的系统时区(当前为 Ubuntu 18.04、20.04 和 22.04)。
这并不理想,因为您必须在心里为日志文件中看到的每个日期添加 1/2 小时,具体取决于一年中的时间(夏季 +2 小时,冬季 +1 小时)。一些 cronjobs 的时间也需要每年调整两次,因为任务应该在 CET 中午运行。
是否有充分的理由(仍然)使用 UTC 作为系统时区?或者我应该切换到 CET,以便我的 cronjobs 和日志文件更好地与挂钟保持一致?
如何在 Linux 中使用 Internet 自动设置系统默认时区?在我看来,NTP 服务器只能更新时间,不能更新时区。有没有可以更改时区的服务器?
timezone ×10
date ×6
linux ×3
debian ×1
geolocation ×1
logs ×1
networking ×1
time ×1
timestamps ×1