希望有人能帮我弄清楚这里到底发生了什么。
我有一个脚本,它接收一个日期作为参数在这种格式"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 -第二天的输出
谁能帮我理解为什么会发生这种情况,这与时区有关吗?
原因似乎是很难进行自由格式的日期解析:
基线日期:(我在美国/多伦多时区)$ date -d "2016-11-06 01:00:00" "+%F %T%z"
2016-11-06 01:00:00-0400
尝试添加一天
$ date -d "2016-11-06 01:00:00 + 1 day" "+%F %T%z"
2016-11-06 19:00:00-0500
嗯,这很奇怪,看起来它增加了一天,然后表示为午夜,然后减去5个小时。
让我们尝试在日期部分添加一个日期
$ date -d "2016-11-06 + 1 day 01:00:00" "+%F %T%z"
2016-11-07 01:00:00-0500
看起来好多了。
在你的脚本中试试:
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"