Attempt to fix #3220

This commit is contained in:
Alexey Milovidov 2018-12-12 13:08:53 +03:00
parent 43d922cc37
commit 8b7a71d6c6
2 changed files with 2 additions and 11 deletions

View File

@ -250,8 +250,7 @@ public:
time_t res = t - lut[index].date;
/// NOTE We doesn't support cases when time change result in switching to previous day.
/// Data is cleaned to avoid these cases, so no underflow occurs here.
/// Data is cleaned to avoid possibility of underflow.
if (res >= lut[index].time_at_offset_change)
res += lut[index].amount_of_offset_change;

View File

@ -114,15 +114,7 @@ DateLUTImpl::DateLUTImpl(const std::string & time_zone_)
lut[i - 1].time_at_offset_change = time_at_offset_change;
/* std::cerr << lut[i - 1].year << "-" << int(lut[i - 1].month) << "-" << int(lut[i - 1].day_of_month)
<< " offset was changed at " << lut[i - 1].time_at_offset_change << " for " << lut[i - 1].amount_of_offset_change << " seconds.\n";*/
/** We doesn't support cases when time change results in switching to previous day.
* As an example, it was a case in Moscow at years 1981..1983 on October 1:
* clock was adjusted one hour backwards exactly at midnight (that was lead to extra hour 23 of Sep 30th).
* We must clean data (and we will make it slightly incorrect) to avoid these cases.
* (In previous example, it will lead to extra hour 0 of Sep 30 instead.)
*/
/// We doesn't support cases when time change results in switching to previous day.
if (static_cast<int>(lut[i - 1].time_at_offset_change) + static_cast<int>(lut[i - 1].amount_of_offset_change) < 0)
lut[i - 1].time_at_offset_change = -lut[i - 1].amount_of_offset_change;
}