【问题标题】:Bash convert date to timestampBash 将日期转换为时间戳
【发布时间】:2024-01-16 08:32:01
【问题描述】:

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

我尝试date -d '20140826225834',但收到'invalid date' 错误。我假设我必须将我拥有的(20140826225834)转换为接受的日期,然后将其转换为时间戳? 编辑:我已经从2014-08-21_23.03.07 sed 这个日期 - 也许转换这个日期类型会更容易

【问题讨论】:

标签: bash date timestamp


【解决方案1】:

您可能应该更改获取日期的格式,以便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 因为sed 比 PHP 更有可能在 shell 脚本中使用 ;)
  • 当我运行第一块 (sed) 时,我得到 1409086714 - 这是时间戳吗?
  • @Lenny 是的。 UNIX 时间戳为 seconds since 1970-01-01 00:00:00 UTC
【解决方案2】:

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

#!/bin/bash

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

echo "$output" # 1409086714

【讨论】: