@@ -16,8 +16,15 @@ cnp.import_array()
16
16
from cpython.object cimport (PyObject_RichCompareBool, PyObject_RichCompare,
17
17
Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE)
18
18
19
- from cpython.datetime cimport (datetime, time, PyDateTime_Check, PyDelta_Check,
20
- PyTZInfo_Check, PyDateTime_IMPORT)
19
+ from cpython.datetime cimport (
20
+ datetime,
21
+ time,
22
+ tzinfo,
23
+ PyDateTime_Check,
24
+ PyDelta_Check,
25
+ PyTZInfo_Check,
26
+ PyDateTime_IMPORT,
27
+ )
21
28
PyDateTime_IMPORT
22
29
23
30
from pandas._libs.tslibs.util cimport (
@@ -29,10 +36,12 @@ from pandas._libs.tslibs.base cimport ABCTimestamp
29
36
30
37
from pandas._libs.tslibs cimport ccalendar
31
38
32
- from pandas._libs.tslibs.conversion import normalize_i8_timestamps
33
39
from pandas._libs.tslibs.conversion cimport (
34
- _TSObject, convert_to_tsobject,
35
- convert_datetime_to_tsobject)
40
+ _TSObject,
41
+ convert_to_tsobject,
42
+ convert_datetime_to_tsobject,
43
+ normalize_i8_timestamps,
44
+ )
36
45
from pandas._libs.tslibs.fields import get_start_end_field, get_date_name_field
37
46
from pandas._libs.tslibs.nattype cimport NPY_NAT, c_NaT as NaT
38
47
from pandas._libs.tslibs.np_datetime cimport (
@@ -1438,13 +1447,18 @@ default 'raise'
1438
1447
"""
1439
1448
Normalize Timestamp to midnight, preserving tz information.
1440
1449
"""
1441
- if self .tz is None or is_utc(self .tz):
1450
+ cdef:
1451
+ ndarray[int64_t] normalized
1452
+ tzinfo own_tz = self .tzinfo # could be None
1453
+
1454
+ if own_tz is None or is_utc(own_tz):
1442
1455
DAY_NS = ccalendar.DAY_NANOS
1443
1456
normalized_value = self .value - (self .value % DAY_NS)
1444
- return Timestamp(normalized_value).tz_localize(self .tz)
1445
- normalized_value = normalize_i8_timestamps(
1446
- np.array([self .value], dtype = ' i8' ), tz = self .tz)[0 ]
1447
- return Timestamp(normalized_value).tz_localize(self .tz)
1457
+ return Timestamp(normalized_value).tz_localize(own_tz)
1458
+
1459
+ normalized = normalize_i8_timestamps(
1460
+ np.array([self .value], dtype = ' i8' ), tz = own_tz)
1461
+ return Timestamp(normalized[0 ]).tz_localize(own_tz)
1448
1462
1449
1463
1450
1464
# Add the min and max fields at the class level
0 commit comments