【问题标题】:Bash convert date to timestampBash 将日期转换为时间戳
【发布时间】:2014-10-26 12:20:15
【问题描述】:

我有一个'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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 2011-01-23
    • 2020-10-19
    • 1970-01-01
    • 2017-04-25
    • 2022-01-08
    相关资源
    最近更新 更多