如何在bash脚本中将此时间戳字符串转换为此格式?

时间:2016-06-16 19:06:05

标签: bash timestamp

我正在阅读的csv文件包含格式为“2016-06-13T18:30:31.868Z”的各种时间戳。我想知道如何使用bash脚本,如何将字符串转换为“18:30:31”,只留下时间组件。

感谢。

4 个答案:

答案 0 :(得分:2)

您只需使用bash parameter expansion

即可
datetime="2016-06-13T18:30:31.868Z"
no_date=${datetime #*T}               # remove "2016-06-13T"
timestamp=${no_date%.*}               # remove ".868Z"

或使用正则表达式:

if [[ $datetime =~ ([0-9][0-9]:[0-9][0-9]:[0-9][0-9]) ]]; then
    timestamp=${BASH_REMATCH[1]}
fi

答案 1 :(得分:1)

最好使用理解它的工具而不是任何文本处理工具来操纵日期时间。

使用GNU date,您可以传递时间格式并使用HH:MM:SS标识符获得所需%T格式的输出:

date -d '2016-06-13T18:30:31.868Z' '+%T'

要设置特定时区,请使用TZ环境变量:

TZ=EST date -d '2016-06-13T18:30:31.868Z' '+%T'

答案 2 :(得分:1)

在Bash中

VAR="2016-06-13T18:30:31.868Z"

FRONT_REMOVED=${VAR%.*}

BACK_REMOVED=${FRONT_REMOVED#T*}

Back Removed应该是您想要的%。*删除句点后的所有内容

#T *删除T

之前的所有内容

答案 3 :(得分:0)

使用substring expansion

$ a="2016-06-13T18:30:31.868Z"
$ echo "${a:11:8}"
18:30:31