@@ -15,7 +15,7 @@ from util cimport (is_integer_object, is_float_object, is_string_object,
1515from cpython.datetime cimport (PyDateTime_Check, PyDate_Check,
1616 PyDateTime_CheckExact,
1717 PyDateTime_IMPORT,
18- timedelta, datetime, date)
18+ timedelta, datetime, date, time )
1919# import datetime C API
2020PyDateTime_IMPORT
2121
@@ -70,11 +70,17 @@ cdef inline object create_date_from_ts(
7070 """ convenience routine to construct a datetime.date from its parts """
7171 return date(dts.year, dts.month, dts.day)
7272
73+ cdef inline object create_time_from_ts(
74+ int64_t value, pandas_datetimestruct dts,
75+ object tz, object freq):
76+ """ convenience routine to construct a datetime.time from its parts """
77+ return time(dts.hour, dts.min, dts.sec, dts.us, tz)
78+
7379
7480def ints_to_pydatetime (ndarray[int64_t] arr , tz = None , freq = None ,
7581 box = " datetime" ):
7682 """
77- Convert an i8 repr to an ndarray of datetimes, date or Timestamp
83+ Convert an i8 repr to an ndarray of datetimes, date, time or Timestamp
7884
7985 Parameters
8086 ----------
@@ -83,19 +89,17 @@ def ints_to_pydatetime(ndarray[int64_t] arr, tz=None, freq=None,
8389 convert to this timezone
8490 freq : str/Offset, default None
8591 freq to convert
86- box : {'datetime', 'timestamp', 'date'}, default 'datetime'
92+ box : {'datetime', 'timestamp', 'date', 'time' }, default 'datetime'
8793 If datetime, convert to datetime.datetime
8894 If date, convert to datetime.date
95+ If time, convert to datetime.time
8996 If Timestamp, convert to pandas.Timestamp
9097
9198 Returns
9299 -------
93100 result : array of dtype specified by box
94101 """
95102
96- assert ((box == " datetime" ) or (box == " date" ) or (box == " timestamp" )), \
97- " box must be one of 'datetime', 'date' or 'timestamp'"
98-
99103 cdef:
100104 Py_ssize_t i, n = len (arr)
101105 ndarray[int64_t] trans, deltas
@@ -115,8 +119,13 @@ def ints_to_pydatetime(ndarray[int64_t] arr, tz=None, freq=None,
115119 if is_string_object(freq):
116120 from pandas.tseries.frequencies import to_offset
117121 freq = to_offset(freq)
122+ elif box == " time" :
123+ func_create = create_time_from_ts
118124 elif box == " datetime" :
119125 func_create = create_datetime_from_ts
126+ else :
127+ raise ValueError (" box must be one of 'datetime', 'date', 'time' or" +
128+ " 'timestamp'" )
120129
121130 if tz is not None :
122131 if is_utc(tz):
0 commit comments