2014-09-02 194 views
4

我有一個格式爲'YYYYMMDDHHMMSS'的日期,我需要將其轉換爲Unix時間戳。Bash將日期轉換爲時間戳

我試圖date -d '20140826225834'但我得到了'invalid date'錯誤。我假設我將不得不將我有的(20140826225834)轉換爲接受日期,然後將其轉換爲時間戳? 編輯:我有sed這個日期從2014-08-21_23.03.07 - 也許這將是更容易轉換此日期類型

+0

[轉換日期時間字符串在bash UNIX時間戳可能重複命令](http://stackoverflow.com/questions/10990949/convert-date-time-string-to-unix-timestamp-in-bash-command) – 2015-07-25 08:59:22

回答

5

您應該更改日期的格式,以便date可以處理它。我用sed將它更改爲YYYY/MM/DD HH:MM:SS格式。

$ date -d"$(sed -r 's#(.{4})(.{2})(.{2})(.{2})(.{2})#\1/\2/\3 \4:\5:#' <<< "20140826225834")" "+%s" 
1409086714 

通過片:

$ sed -r 's#(.{4})(.{2})(.{2})(.{2})(.{2})#\1/\2/\3 \4:\5:#' <<< "20140826225834" 
2014/08/26 22:58:34 

$ date -d"2014/08/26 22:58:34" 
Tue Aug 26 22:58:34 CEST 2014 

$ date -d"2014/08/26 22:58:34" "+%s" 
1409086714 
+1

+1因爲'sed'將更有可能被用在shell腳本th一個PHP;) – hek2mgl 2014-09-02 09:28:33

+0

當我運行第一塊(sed)時,我得到了'1409086714' - 這是時間戳嗎? – Lenny 2014-09-02 09:44:58

+0

@Lenny是的。 UNIX時間戳是從1970-01-01 00:00:00 UTC開始的秒數。 – fedorqui 2014-09-02 09:47:49

0

你可以使用PHP,因爲PHP的strtotime()可以解析您的輸入格式:

#!/bin/bash 

input="20140826225834" 
output=$(php -r 'echo strtotime("'"$input"'");') 

echo "$output" # 1409086714