【问题标题】:Convert timestamp string to UTC date in bash在bash中将时间戳字符串转换为UTC日期
【发布时间】:2018-10-29 17:14:06
【问题描述】:

我想用 UTC 时间戳重命名我的文件。目前,这些文件是基于本地时间 (CET) 的名称,如下所示,其中第一个数字是时间戳:

DataExport.test_20181029183500_300.csv.gz

由于某种原因,我无法在文件源本身修复它,所以我必须稍后执行更改。

目前我提取了以下数字:

echo "DataExport.test_20181029183500_300.csv.gz" | cut -d"_" -f2- | cut -c1-14

但现在我卡在这里,如何继续。

谢谢你和最好的问候

【问题讨论】:

  • 您可以使用此命令获取 UTC 日期:date -d "2018-10-29 18:35:00" +%s
  • @Paplusc,感谢您的反馈。我同意这一点,但是否有可能直接从上面的字符串转换为“UTC”字符串?

标签: bash date timestamp utc


【解决方案1】:

将此作为代码的延续

date -d "$( echo "DataExport.test_20181029183500_300.csv.gz" | cut -d'_' -f2 | sed 's/\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1-\2-\3 \4:\5:\6/g' )" +%s

将输出:

1540809300

然后您可以使用该行的输出来执行文件的重命名。但我建议如果仅仅为此创建一个函数或一个实际脚本会变得复杂。

这是一个快速的功能:

function rename_ts() {

    filename="$1"
    time_stamp=$(echo "$filename" | cut -d'_' -f2)
    date_fmt=$(echo "$time_stamp" | sed 's/\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1-\2-\3 \4:\5:\6/g')
    utc=$(date -d "$date_fmt" +%s)

    mv $filename $(echo "$filename" | sed "s/$time_stamp/$utc/g")

}

例如rename_ts DataExport.test_20181029183500_300.csv.gz

【讨论】:

  • 非常感谢您,它几乎成功了。我唯一改变的是,对于新名称,我通过在 utc 定义后添加 ts_utc=$(date -u -d \@$utc +"%Y%m%d%H%M%S") 再次使用旧时间格式,并在移动文件时在 sed 中使用它。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2019-03-14
  • 2015-10-24
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 2014-11-18
相关资源
最近更新 更多