递增&以小时格式递减时间戳值

时间:2015-05-11 07:34:22

标签: shell unix scripting vi

我有以下格式的开始和结束时间戳范围:

2015-05-07 12:00:00
2015-05-07 13:00:00
2015-05-07 14:00:00
-------------------
2015-05-08 08:00:00
2015-05-08 09:00:00

现在我想以小时格式获取此范围之间的时间戳列表,如下所示:

CURRENT_EST_HOUR=`date -d '2015-05-08 12:00:00 1 hour' +%Y-%m-%d" "%H":00:00"`

我的问题始于无法使用shell变量以小时格式正确递增或递减时间戳值。

以下作品:

timestamp1='2015-05-08 12:00:00'
CURRENT_EST_HOUR=`date -d '${timestamp1} 1 hour' +%Y-%m-%d" "%H":00:00"`

但是如果我尝试用一​​个变量代替时间戳字符串,我会得到额外的操作数'或者'无效日期'错误。

CURRENT_EST_HOUR=`date -d ${timestamp1}'1 hour' +%Y-%m-%d" "%H":00:00"`

SelectedItem

这样做的正确方法是什么?

在Unix中有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

这是因为您的系统时区会影响结果。为了避免这种情况,只需在命令和" UTC"中添加--utc标志。时区到时间。像这样:

$ date --utc -d '2015-05-08 12:00:00 UTC + 1 hour' +%Y-%m-%d" "%H":00:00"
2015-05-08 13:00:00

答案 1 :(得分:0)

我能够通过命令中的一个小修正来做到这一点:

PREV_INS_TS=`date -d '2015-05-08 12:00:00 1 hour' +%Y-%m-%d" "%H":00:00"`

在1小时之前+ +弄乱了结果。也许UTC内部正在进行转换。

使用变量代替timestamp字符串时,以下命令有效:

PREV_INS_TS=`date -d "${PREV_INS_TS}"'1 hour' +%Y-%m-%d" "%H":00:00"`