Bash将日期转换为时间戳

问题描述:

我有一个格式为'YYYYMMDDHHMMSS'的日期,我需要将其转换为Unix时间戳。Bash将日期转换为时间戳

我试图date -d '20140826225834'但我得到了'invalid date'错误。我假设我将不得不将我有的(20140826225834)转换为接受日期,然后将其转换为时间戳? 编辑:我有sed这个日期从2014-08-21_23.03.07 - 也许这将是更容易转换此日期类型

+0

[转换日期时间字符串在bash UNIX时间戳可能重复命令](http://*.com/questions/10990949/convert-date-time-string-to-unix-timestamp-in-bash-command) – 2015-07-25 08:59:22

您应该更改日期的格式,以便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

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

#!/bin/bash 

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

echo "$output" # 1409086714