Shell添加保存在参数中的日期



希望有人能帮我弄清楚这里到底发生了什么。

我有一个脚本,它接收一个日期作为参数在这种格式"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"

最新更新