void MIIntervalFromPyDelta(PyObject* pyDelta, MI_Interval& interval) { ZeroMemory(&interval, sizeof(MI_Interval)); int days = PyDateTime_DELTA_GET_DAYS(pyDelta); if (days < 0) { throw MI::Exception(L"Negative datetime.timedelta intervals are not supported"); } interval.days = (MI_Uint32)days; MI_Uint32 daySeconds = (MI_Uint32)PyDateTime_DELTA_GET_SECONDS(pyDelta); interval.hours = daySeconds / 3600; interval.minutes = (daySeconds - interval.hours * 3600) / 60; interval.seconds = daySeconds - interval.hours * 3600 - interval.minutes * 60; interval.microseconds = (MI_Uint32)PyDateTime_DELTA_GET_MICROSECONDS(pyDelta); }
static PyObject * _pydatetime_string_delta(pydatetimeObject *self) { PyDateTime_Delta *obj = (PyDateTime_Delta*)self->wrapped; char buffer[8]; int i; int a = PyDateTime_DELTA_GET_MICROSECONDS(obj); for (i=0; i < 6 ; i++) { buffer[5-i] = '0' + (a % 10); a /= 10; } buffer[6] = '\0'; return Bytes_FromFormat("'%d days %d.%s seconds'::interval", PyDateTime_DELTA_GET_DAYS(obj), PyDateTime_DELTA_GET_SECONDS(obj), buffer); }
static void * pydelta_to_timespec(PyObject *td, struct timespec *ts) { if (!PyDelta_Check(td)) { return NULL; } /* ts->tv_nsec = (PyDateTime_DELTA_GET_MICROSECONDS(td) % MICROSEC) * 1000; */ ts->tv_nsec = MICRO2NANO(PyDateTime_DELTA_GET_MICROSECONDS(td)); ts->tv_sec = PyDateTime_DELTA_GET_SECONDS(td); if (PyErr_Occurred() != NULL) { return NULL; } ts->tv_sec += PyDateTime_DELTA_GET_DAYS(td) * 24 * 60 * 60; if (PyErr_Occurred() != NULL) { return NULL; } printf("pydelta_to_timespec sec: %ld, nsec: %ld\n", ts->tv_sec, ts->tv_nsec); return td; }//pydelta_to_timespec()