Skip to content

Commit 08ae4f7

Browse files
committed
Merge pull request #7610 from sinhrks/nanots
BUG: Timestamp.__new__ doesnt preserve nanosecond
2 parents d21f44b + 09a1097 commit 08ae4f7

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

doc/source/v0.14.1.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ Bug Fixes
255255

256256
- Bug in ``Timestamp.tz_localize`` resets ``nanosecond`` info (:issue:`7534`)
257257
- Bug in ``DatetimeIndex.asobject`` raises ``ValueError`` when it contains ``NaT`` (:issue:`7539`)
258-
258+
- Bug in ``Timestamp.__new__`` doesn't preserve nanosecond properly (:issue:`7610`)
259259

260260
- Bug in ``Index.astype(float)`` where it would return an ``object`` dtype
261261
``Index`` (:issue:`7464`).

pandas/tseries/tests/test_tslib.py

+35-1
Original file line numberDiff line numberDiff line change
@@ -283,14 +283,48 @@ def test_timedelta_ns_based_arithmetic(self):
283283
def test_timedelta_us_arithmetic(self):
284284
self.assert_ns_timedelta(self.timestamp + np.timedelta64(-123, 'us'), -123000)
285285

286-
def test_timedelta_ns_arithmetic(self):
286+
def test_timedelta_ms_arithmetic(self):
287287
time = self.timestamp + np.timedelta64(-123, 'ms')
288288
self.assert_ns_timedelta(time, -123000000)
289289

290290
def test_nanosecond_string_parsing(self):
291291
self.timestamp = Timestamp('2013-05-01 07:15:45.123456789')
292292
self.assertEqual(self.timestamp.value, 1367392545123456000)
293293

294+
def test_nanosecond_timestamp(self):
295+
# GH 7610
296+
expected = 1293840000000000005
297+
t = Timestamp('2011-01-01') + offsets.Nano(5)
298+
self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000005')")
299+
self.assertEqual(t.value, expected)
300+
self.assertEqual(t.nanosecond, 5)
301+
302+
t = Timestamp(t)
303+
self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000005')")
304+
self.assertEqual(t.value, expected)
305+
self.assertEqual(t.nanosecond, 5)
306+
307+
t = Timestamp(np.datetime64('2011-01-01 00:00:00.000000005Z'))
308+
self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000005')")
309+
self.assertEqual(t.value, expected)
310+
self.assertEqual(t.nanosecond, 5)
311+
312+
expected = 1293840000000000010
313+
t = t + offsets.Nano(5)
314+
self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000010')")
315+
self.assertEqual(t.value, expected)
316+
self.assertEqual(t.nanosecond, 10)
317+
318+
t = Timestamp(t)
319+
self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000010')")
320+
self.assertEqual(t.value, expected)
321+
self.assertEqual(t.nanosecond, 10)
322+
323+
t = Timestamp(np.datetime64('2011-01-01 00:00:00.000000010Z'))
324+
self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000010')")
325+
self.assertEqual(t.value, expected)
326+
self.assertEqual(t.nanosecond, 10)
327+
294328
def test_nat_arithmetic(self):
295329
# GH 6873
296330
nat = tslib.NaT

pandas/tslib.pyx

+1
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,7 @@ cdef convert_to_tsobject(object ts, object tz, object unit):
956956

957957
if is_timestamp(ts):
958958
obj.value += ts.nanosecond
959+
obj.dts.ps = ts.nanosecond * 1000
959960
_check_dts_bounds(&obj.dts)
960961
return obj
961962
elif PyDate_Check(ts):

0 commit comments

Comments
 (0)