Skip to content

Commit 9f71e0f

Browse files
committed
BUG: always store UTC datetime64 value in Timestamp, test comparisons. close #1260
1 parent 04c8457 commit 9f71e0f

File tree

3 files changed

+20
-19
lines changed

3 files changed

+20
-19
lines changed

TODO.rst

+1
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,4 @@ Performance blog
5757
- Take
5858

5959
git log v0.6.1..master --pretty=format:%aN | sort | uniq -c | sort -rn
60+
git log a8c2f88..master --pretty=format:%aN | sort | uniq -c | sort -rn

pandas/src/datetime.pyx

+5-7
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,8 @@ cpdef convert_to_tsobject(object ts, object tz=None):
333333
elif PyDateTime_Check(ts):
334334
obj.value = _pydatetime_to_dts(ts, &obj.dts)
335335
obj.tzinfo = ts.tzinfo
336-
utc_convert = 0
336+
if obj.tzinfo is not None:
337+
obj.value -= _delta_to_nanoseconds(obj.tzinfo._utcoffset)
337338
elif PyDate_Check(ts):
338339
obj.value = _date_to_datetime64(ts, &obj.dts)
339340
else:
@@ -350,12 +351,9 @@ cpdef convert_to_tsobject(object ts, object tz=None):
350351
pos = trans.searchsorted(obj.value) - 1
351352
inf = tz._transition_info[pos]
352353

353-
obj.value = obj.value + deltas[pos]
354-
355-
if utc_convert:
356-
pandas_datetime_to_datetimestruct(obj.value, PANDAS_FR_ns,
357-
&obj.dts)
358-
obj.tzinfo = tz._tzinfos[inf]
354+
pandas_datetime_to_datetimestruct(obj.value + deltas[pos],
355+
PANDAS_FR_ns, &obj.dts)
356+
obj.tzinfo = tz._tzinfos[inf]
359357

360358
return obj
361359

pandas/tseries/tests/test_timezones.py

+14-12
Original file line numberDiff line numberDiff line change
@@ -318,18 +318,20 @@ def test_intersection(self):
318318
result = left.intersection(right)
319319
self.assert_(result.tz == left.tz)
320320

321-
def test_tz_timestamp_eq(self):
322-
dt = datetime.today()
323-
utc = lib.Timestamp(dt, tz=pytz.timezone('UTC'))
324-
for z in pytz.all_timezones:
325-
zts = utc.tz_convert(pytz.timezone(z))
326-
self.assert_(utc == zts)
327-
328-
rng = date_range('3/1/2001', '4/1/2001', freq='H', tz='utc')
329-
for z in pytz.all_timezones:
330-
rng_z = rng.tz_convert(z)
331-
for k1, k2 in zip(rng, rng_z):
332-
self.assert_(k1 == k2)
321+
def test_timestamp_equality_different_timezones(self):
322+
utc_range = date_range('1/1/2000', periods=20, tz='UTC')
323+
324+
eastern_range = utc_range.tz_convert('US/Eastern')
325+
berlin_range = utc_range.tz_convert('Europe/Berlin')
326+
327+
for a, b, c in zip(utc_range, eastern_range, berlin_range):
328+
self.assertEquals(a, b)
329+
self.assertEquals(b, c)
330+
self.assertEquals(a, c)
331+
332+
self.assert_((utc_range == eastern_range).all())
333+
self.assert_((utc_range == berlin_range).all())
334+
self.assert_((berlin_range == eastern_range).all())
333335

334336
if __name__ == '__main__':
335337
nose.runmodule(argv=[__file__,'-vvs','-x','--pdb', '--pdb-failure'],

0 commit comments

Comments
 (0)