Thomas Lockhart <lockhart@alumni.caltech.edu> writes:
>>>>> Looks to me like an off-by-one kind of problem in deciding which
>>>>> timezone applies to midnight of a transition day.
> 2) Convert to an integer "Unix system time".
> 3) Rotate by 12 hours (to UTC noon!). This is supposed to ensure that we
> stay in the correct day after conversion to local time *no matter what
> time zone we are actually in*, but is likely the problem in this edge
> case.
> 4) Call localtime() to fill in the fields of a tm structure. This is how
> I get ahold of the time zone (which is not known before this step). For
> this DST edge case, the time zone is off by one hour :(
> 5) Copy the fields from the result of the call to localtime() into a new
> tm structure, with zeros for time fields.
Seems like you could just skip step 3 and call localtime() with fields
indicating midnight of the specified date. Then use the complete
localtime result (don't discard any fields) and you should be OK, no?
regards, tom lane