Bash
bash:將日期從轉換為 unix 時間戳更改時間戳
在 $company 的 xen-servers(DOM0 或 DOMU)上執行以下命令會給我一個負數,在每個其他系統零 (0) 上(即使在我的 cygwin 中)。
date -d "1970-01-01T00:00:00" "+%s"
$TZ
未設置,/etc/localtime
是同一個文件/usr/share/zoneinfo/UTC
日期在 GNU coreutils 的 8.12 版中。這裡出了什麼問題?可能需要哪些額外資訊?
如果 $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
如果我強迫它去探戈,那麼我會得到一個負數:
# 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