我发现了一个关于约会的错误

时间:2017-11-17 12:09:02

标签: date gnu

我正在测试日期实用程序,并发现了一些意外行为。我的测试是将日期设置为给定的日/月/年,添加24小时,并确认它返回以下日期。

在我的测试中,这适用于2017年11月4日和2017年11月6日,但不适用于2017年11月5日。

这显然是一个错误,不是吗?如何在关键的GNU实用程序中出现这样的根本缺陷?

[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ date=`date -d "2017-11-04" +%s`
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ date_new=`expr $date + 86400`
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ req_t=`date -d @$date_new "+%Y%m%d"`
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ echo $req_t
20171105
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ date=`date -d "2017-11-06" +%s`
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ date_new=`expr $date + 86400`
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ req_t=`date -d @$date_new "+%Y%m%d"`
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ echo $req_t
20171107
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ date=`date -d "2017-11-05" +%s`
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ date_new=`expr $date + 86400`
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ req_t=`date -d @$date_new "+%Y%m%d"`
[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ echo $req_t
20171105

[pp_dt_risk_batch@lvsdmetl05 creditsafe]$ date --version
date (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David MacKenzie.

1 个答案:

答案 0 :(得分:2)

您似乎关注以下建议的明显差异(注意86400秒= 24小时)

  • 2017-11-04 00:00 + 86400秒= 2017-11-05 00:00
  • 2017-11-05 00:00 + 86400秒= 2017-11-05 24:00(见下文!)
  • 2017-11-06 00:00 + 86400秒= 2017-11-07 00:00

不是一个错误。

你没有提到你所在的时区,但在北美的大部分地区,2017-11-05是夏令时结束的那一天,所以它长达25小时(90000秒)。 / p>