我是shell脚本的新手,试图弄清楚如何将“20140910192311”转换为2014/09/10 19:23:11的日期格式。
当我尝试
时echo $(date --date“20140910192311”+%Y-%m-%d \%H:%M:%S)
我得到了
日期:无效日期`20140910192311'
答案 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