我有以下格式的开始和结束时间戳范围:
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中有更好的方法吗?
答案 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"`