Commit a8d806be authored by jbrockmendel's avatar jbrockmendel Committed by GitHub

ENH: C-properties for datetime objects (GH-3737)

parent 3774a78b
......@@ -24,7 +24,33 @@ cdef extern from "datetime.h":
pass
ctypedef extern class datetime.datetime[object PyDateTime_DateTime]:
pass
@property
cdef inline int year(self):
return PyDateTime_GET_YEAR(self)
@property
cdef inline int month(self):
return PyDateTime_GET_MONTH(self)
@property
cdef inline int day(self):
return PyDateTime_GET_DAY(self)
@property
cdef inline int hour(self):
return PyDateTime_DATE_GET_HOUR(self)
@property
cdef inline int minute(self):
return PyDateTime_DATE_GET_MINUTE(self)
@property
cdef inline int second(self):
return PyDateTime_DATE_GET_SECOND(self)
@property
cdef inline int microsecond(self):
return PyDateTime_DATE_GET_MICROSECOND(self)
ctypedef extern class datetime.timedelta[object PyDateTime_Delta]:
pass
......
# coding: utf-8
#cimport cpython.datetime as cy_datetime
#from datetime import time, date, datetime, timedelta, tzinfo
cimport cython
from cpython.datetime cimport import_datetime, timedelta
from cpython.datetime cimport time_new, date_new, datetime_new, timedelta_new
......@@ -212,3 +210,31 @@ def test_timedelta_total_seconds():
pytd = now - py_datetime.datetime(1970, 1, 1)
return total_seconds(td), pytd.total_seconds()
@cython.test_fail_if_path_exists(
"//CoerceFromPyTypeNode",
"//AttributeNode",
)
def test_datetime_attrs_inlined(datetime dt):
# GH#3737
"""
>>> from datetime import datetime
>>> py_dt = datetime(2020, 8, 18, 4, 9)
>>> dt = test_datetime_attrs_inlined(py_dt)
>>> dt[:5]
(2020, 8, 18, 4, 9)
>>> dt[5] == py_dt.second or (dt[5], py_dt.second)
True
>>> dt[6] == py_dt.microsecond or (dt[6], py_dt.microsecond)
True
"""
return (
dt.year,
dt.month,
dt.day,
dt.hour,
dt.minute,
dt.second,
dt.microsecond,
)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment