从Numbers bash shell脚本获取格式化日期

时间:2014-09-17 22:08:54

标签: bash shell

我是shell脚本的新手,试图弄清楚如何将“20140910192311”转换为2014/09/10 19:23:11的日期格式。

当我尝试

  

echo $(date --date“20140910192311”+%Y-%m-%d \%H:%M:%S)

我得到了

日期:无效日期`20140910192311'

2 个答案:

答案 0 :(得分:2)

使用字符索引

子字符串提取将完全符合您的要求:

#!/bin/bash
day=20140910192311
echo "${day:0:4}/${day:4:2}/${day:6:2} ${day:8:2}:${day:10:2}:${day:12:2}"

<强>输出:

2014/09/10 19:23:11

作为一个单行:

day=20140910192311; echo "${day:0:4}/${day:4:2}/${day:6:2} ${day:8:2}:${day:10:2}:${day:12:2}"

这就是它的全部内容。

答案 1 :(得分:1)

date并不聪明。您必须使用文档中列出的GNU -d选项的格式。您可能需要自己解析它。

if [[ 20140910192311 =~ ([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2}) ]]; then
    printf '%s-%s-%s %s:%s:%s\n' "${BASH_REMATCH[@]:1}"
fi

或者可能更好:

if [[ 20140910192311 =~ ([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2}) ]]; then
    LC_TIME=C date -d "$(printf '%s-%s-%s %s:%s:%s' "${BASH_REMATCH[@]:1}")" '+%Y-%m-%d %H:%M:%S'
fi