在 $company 的 xen 服务器(DOM0 或 DOMU)上运行以下命令会给出一个负数,而在其他每个系统上则为零(0)(即使在我的 cygwin 中)。
date -d "1970-01-01T00:00:00" "+%s"
$TZ
未设置,/etc/localtime
与/usr/share/zoneinfo/UTC
date 是 GNU coreutils 的 8.12 版本。这里出了什么问题?可能需要哪些其他信息?
答案1
如果未设置 $TZ 且 /etc/localtime 是 UTC,那么为什么在 date 命令中使用时区 T (Tango)?
在我的系统上,我的当地时间是 EDT。
# date
Wed Mar 18 12:39:03 EDT 2015
# date -d "1970-01-01 00:00:00" "+%s"
18000
如果我强制使用 Tango,那么我会得到一个负数:
# date -d "1970-01-01T00:00:00" "+%s"
-25200
如果我将时区更改为 UTC,它将按预期工作:
# export TZ=UTC
# date
Wed Mar 18 16:41:23 UTC 2015
# date -d "1970-01-01 00:00:00" "+%s"
0
来自日期手册页:
DATE STRING
The --date=STRING is a mostly free format human readable date string such as "Sun, 29 Feb 2004 16:21:42
-0800" or "2004-02-29 16:21:42" or even "next Thursday". A date string may contain items indicating calendar
date, time of day, time zone, day of week, relative time, relative date, and numbers. An empty string indi-
cates the beginning of the day. The date string format is more complex than is easily documented here but is
fully described in the info documentation.
正如您所见,这是一个“大多数自由格式的人类可读日期”,它将从任何它认为合适的位置获取时区。测试它非常容易。
例如:
# date
Wed Mar 18 13:05:42 EDT 2015
现在是探戈时间:
[root@wailea ~]# date -d "2015-3-18T13:05:42"
Wed Mar 18 02:05:42 EDT 2015
现在最后是探戈时间:
[root@wailea ~]# date -d "2015-3-18 13:05:42 T"
Wed Mar 18 02:05:42 EDT 2015
现在祖鲁时间:
[root@wailea ~]# date -d "2015-3-18Z13:05:42"
Wed Mar 18 09:05:42 EDT 2015
我想您能明白这一点。如果您不熟悉军事时区,以下是列表: http://www.timeanddate.com/time/zones/military
您还可以尝试使用 zdump 来查看您的区域文件是否不符合您的预期:
Zdump prints the current time in each zonename named on the command line.
# zdump /etc/localtime
/etc/localtime Wed Mar 18 21:21:04 2015 EDT
答案2
在指定日期和时间时ISO 8601Z
格式,如果您想强制将其作为 UTC 处理,则需要附加:
$ date -d "1970-01-01T00:00:00Z" "+%s"
0
+0
或者,您可以使用或的 UTC 偏移量-0
来代替Z
。