Bash

bash:將日期從轉換為 unix 時間戳更改時間戳

  • March 19, 2015

在 $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

引用自:https://serverfault.com/questions/676477