On Wed, Jan 02, 2002 at 11:35:08AM -0500, Tom Lane wrote:
> Karel Zak <zakkr@zf.jcu.cz> writes:
> > I start fix my bug with "YY vs. zero" in formatting.c, and before it
> > a see current CVS:
>
> > test=# select to_timestamp('10-10-2001', 'MM-DD-YYYY');
> > to_timestamp
> > ------------------------
> > 2001-10-10 00:00:00+02
> > (1 row)
>
> > test=# select to_date('10-10-2001', 'MM-DD-YYYY');
> > to_date
> > ------------
> > 2001-10-09
> > ^^
>
> Hmm, is 2001-10-10 a daylight-savings transition day in your timezone?
No, it's daylight-savings independent. The interesting thing is that you not see it. I found some things:
* it not happen for GMT timezone, but for others only (I test 'Japan' and 'CET').
* the difference between to_date and to_timestamp is that to_date use the timestamp_date() for conversion. And in the
timestamp_date()is used timestamp2tm() that output bad 'tm' struct.
The basic difference is that timestamp2tm() with right output do code that call localtime() and timestamp2tm() with
badoutput skip it, because 'tzp' is not defined ("if (tzp != NULL)" in this timestamp2tm()). * and the other thing:
# select to_date('12-13-1901', 'MM-DD-YYYY'); to_date------------ 1901-12-13(1 row)
# select to_date('12-14-1901', 'MM-DD-YYYY');NOTICE: timestamp_date: year:1901 mon:12, mday:13 to_date------------
1901-12-13(1row) For 'CET' timezone are all dates before '12-14-1901' right :-)
IMHO it's timezone problem.
Karel
-- Karel Zak <zakkr@zf.jcu.cz>http://home.zf.jcu.cz/~zakkr/C, PostgreSQL, PHP, WWW, http://docs.linux.cz,
http://mape.jcu.cz