-
- Notifications
You must be signed in to change notification settings - Fork 19.2k
Closed
Labels
Milestone
Description
Two things in tslib look slightly fishy, merit double-checking.
https://github.com/pandas-dev/pandas/blob/master/pandas/_libs/tslib.pyx#L3617
cpdef int64_t tz_convert_single(int64_t val, object tz1, object tz2): [...] if get_timezone(tz2) == 'UTC': return utc_date if is_tzlocal(tz2): pandas_datetime_to_datetimestruct(val, PANDAS_FR_ns, &dts) # <--- Is this right? dt = datetime(dts.year, dts.month, dts.day, dts.hour, dts.min, dts.sec, dts.us, tz2) delta = int(get_utcoffset(tz2, dt).total_seconds()) * 1000000000 return utc_date + delta [...] return utc_date + offset The piece that looks off is the use of val instead of utc_date. The analogous portion of tz_convert reads:
if is_tzlocal(tz2): for i in range(n): v = utc_dates[i] if v == NPY_NAT: result[i] = NPY_NAT else: pandas_datetime_to_datetimestruct(v, PANDAS_FR_ns, &dts) # < --- Is this right? dt = datetime(dts.year, dts.month, dts.day, dts.hour, dts.min, dts.sec, dts.us, tz2) delta = (int(get_utcoffset(tz2, dt).total_seconds()) * 1000000000) result[i] = v + delta i.e. these appear inconsistent. Adding an assertion assert utc_date == val to the relevant case in tz_convert_single does not cause any test failures. Can someone confirm that this is correct as-is?
_localize_tso has a catch-all branch that looks like it should never be hit. If that is correct, then this can be simplified a decent amount.