希望有人能帮助我解决这里发生的事情。
我有一个脚本,以这种格式接收日期作为参数" 2016-09-01 00:00:00"并且应该创建另一个包含将来某天的日期的变量,代码在
之下 currentDate=$1
currentDate=$(date +"%Y-%m-%d %H:%M:%S" -d "$currentDate")
nextDate=$(date +"%Y-%m-%d %H:%M:%S" -d "$currentDate + 1 day")
echo $currentDate
echo $nextDate
有时这完全正常,例如
2016-09-01 00:00:00 - 作为参数
给出的日期2016-09-02 00:00:00 - 第二天的输出
但有时它只会增加23个小时,具体取决于提供的日期
2016-02-01 00:00:00 - 作为参数
给出的日期2016-02-01 23:00:00 - 第二天的输出
如果我将nextDay变量更改为添加三天
nextDate=$(date +"%Y-%m-%d %H:%M:%S" -d "$currentDate + 3 day")
它给出如下输出仅增加21小时而不是3天
2016-02-01 00:00:00 - 作为参数
给出的日期2016-02-01 21:00:00 - 第二天的输出
有人可以帮我理解为什么会发生这种情况,是否与时区有关?
答案 0 :(得分:0)
原因似乎是进行自由格式日期解析有多困难:
基准日期:(我在美国/多伦多时区的时间)
$ date -d "2016-11-06 01:00:00 + 1 day" "+%F %T%z"
2016-11-06 19:00:00-0500
尝试添加一天
$ date -d "2016-11-06 + 1 day 01:00:00" "+%F %T%z"
2016-11-07 01:00:00-0500
嗯,这很奇怪,看起来像是在增加一天,然后再表达为午夜,然后减去5个小时。
让我们尝试在日期部分添加一天
read current_date current_time < <(date -d "$1" +"%F %T%z")
echo "$current_date $current_time"
next_day=$(date -d "$current_date + 1 day $current_time" +"%F %T%z")
echo "$next_day"
three_days=$(date -d "$current_date + 3 day $current_time" +"%F %T%z")
echo "$three_days"
看起来更好。
在你的脚本中试试这个:
{{1}}