在bash脚本中将datetime更改为timestamp

时间:2014-03-21 02:45:00

标签: bash date timestamp

我的文件myTime中有一个json {   “beginTime”:“2014-Mar-19 02:15:00”,   “endTime”:“2014-Mar-29 02:00:00” }

我想获取beginTime并将其更改为时间戳。

我通过以下代码获得beginTime:

beginTime=($(jq -r '.beginTime' myTime))

我将Mar替换为03:

beginTime=($(echo "$beginTime" | sed -r 's/[Mar]+/03/g'))

我将其更改为时间戳:

date -d "$beginTime" "+%s"

我得到1395162000,这意味着只改变2014-03-19,因为$ beginTime给出2014-03-19,数组的第一个元素。 所以我尝试了另一个代码

date -d "${beginTime[@]}" "+%s"

现在我得到了

date: extra operand `+%s'

但是这段代码还可以

date -d "2014-03-19 02:15:00" "+%s"

有人能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

不要使用数组变量 - 您需要将日期和时间捕获为单个字符串:

beginTime=$(jq -r '.beginTime' myTime | sed 's/Mar/03/') # "2014-03-19 02:15:00"

请注意,我已将前两个命令合并为一个。

(顺便说一下:正则表达式/[Mar]+/恰好在这种情况下起作用,但不是您的意图 - 请改用/Mar//[Mar]+/匹配至少长度为1的任何范围任何序列中的以下任何字符:Mar。)