Re: [BUGS] Date calc bug
От | Thomas Lockhart |
---|---|
Тема | Re: [BUGS] Date calc bug |
Дата | |
Msg-id | 3871AB34.5ACE74C7@alumni.caltech.edu обсуждение исходный текст |
Ответ на | Re: [BUGS] Date calc bug (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: [BUGS] Date calc bug
|
Список | pgsql-hackers |
> forum=> select datetime(now())+'74565 days'::timespan as ido; > Thu Jan 19 14:07:30 2068 and > select '12-01-1999'::datetime + '@ 1 month - 1 sec' ; > Thu Dec 30 23:59:59 1999 EST I've repaired both problems in both the development and release trees. Thanks for the reports and analysis. Patch enclosed... - Thomas -- Thomas Lockhart lockhart@alumni.caltech.edu South Pasadena, California*** ../src/backend/utils/adt/dt.c.orig Mon Jan 3 08:27:24 2000 --- ../src/backend/utils/adt/dt.c Mon Jan 3 16:41:08 2000 *************** *** 787,792 **** --- 787,793 ---- * To add a month, increment the month, and use the same day of month. * Then, if the next month has fewerdays, set the day of month * to the last day of month. + * Lastly, add in the "quantitative time". */ DateTime * datetime_pl_span(DateTime *datetime, TimeSpan *span) *************** *** 815,826 **** { dt = (DATETIME_IS_RELATIVE(*datetime) ? SetDateTime(*datetime) : *datetime); - #ifdef ROUND_ALL - dt = JROUND(dt + span->time); - #else - dt += span->time; - #endif - if (span->month != 0) { struct tm tt, --- 816,821 ---- *************** *** 853,858 **** --- 848,859 ---- DATETIME_INVALID(dt); } + #ifdef ROUND_ALL + dt = JROUND(dt + span->time); + #else + dt += span->time; + #endif + *result = dt; } *************** *** 2441,2447 **** tm2timespan(struct tm * tm, double fsec, TimeSpan *span) { span->month = ((tm->tm_year * 12) + tm->tm_mon); ! span->time = ((((((tm->tm_mday * 24) + tm->tm_hour) * 60) + tm->tm_min) * 60) + tm->tm_sec); span->time = JROUND(span->time+ fsec); return 0; --- 2442,2451 ---- tm2timespan(struct tm * tm, double fsec, TimeSpan *span) { span->month = ((tm->tm_year * 12) + tm->tm_mon); ! span->time = ((((((tm->tm_mday * 24.0) ! + tm->tm_hour) * 60.0) ! + tm->tm_min) * 60.0) ! + tm->tm_sec); span->time = JROUND(span->time + fsec); return 0;
В списке pgsql-hackers по дате отправления: