[ruby-cvs:78718] d6a2bce64a (master): time.c (find_time_t): fix round-to-zero bug
"Yusuke Endoh" <[email protected]>
| Newsgroups | gmane.comp.lang.ruby.cvs |
|---|---|
| Message-ID | <[email protected]> |
Yusuke Endoh 2019-12-17 10:31:20 +0900 (Tue, 17 Dec 2019)
New Revision: d6a2bce64a
https://github.com/ruby/ruby/commit/d6a2bce64a
Log:
time.c (find_time_t): fix round-to-zero bug
`find_time_t` did not work correctly for year older than the Epoch
because it used C's integer division (which rounds negative to zero).
For example, `TIme.new(1933)` returned a wrong time whose year is 1922
in Asia/Kuala_Lumpur because there is no 00:00:00 1st Jan. 1933 in the
time zone.
```
$ TZ=Asia/Kuala_Lumpur ruby -e 'p Time.new(1933)'
1932-12-31 00:00:00 +0700
```
This change fixes the issue by using `DIV` macro instead of `/`.
Now `Time.new(1933)` returns a time in 1933.
```
$ TZ=Asia/Kuala_Lumpur ruby -e 'p Time.new(1933)'
1933-01-01 00:20:00 +0720
```
[Bug #16159]
Modified files:
time.c