我正在阅读的csv文件包含格式为“2016-06-13T18:30:31.868Z”的各种时间戳。我想知道如何使用bash脚本,如何将字符串转换为“18:30:31”,只留下时间组件。
感谢。
答案 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)
$ a="2016-06-13T18:30:31.868Z"
$ echo "${a:11:8}"
18:30:31