static PyObject* tds_Time(PyObject* self, PyObject* args) { int hour, minute, second; if (!PyArg_ParseTuple(args, "iii", &hour, &minute, &second)) { return NULL; } VERIFY_DATETIME_PART(hour, 0, 23); VERIFY_DATETIME_PART(minute, 0, 59); VERIFY_DATETIME_PART(second, 0, 59); return PyTime_FromTime_(hour, minute, second, 0); UNUSED(self); }
static PyObject* tds_TimeFromTicks(PyObject* self, PyObject* args) { PyObject* time = NULL; PyObject* datetime = PyDateTime_FromTimestamp_(args); if (datetime) { time = PyTime_FromTime_(PyDateTime_DATE_GET_HOUR_(datetime), PyDateTime_DATE_GET_MINUTE_(datetime), PyDateTime_DATE_GET_SECOND_(datetime), PyDateTime_DATE_GET_MICROSECOND_(datetime)); Py_DECREF(datetime); } return time; UNUSED(self); }
static PyObject* DATETIME_topython(enum TdsType tdstype, const void* data, size_t ndata) { DBDATETIME dbdatetime; if (!ndata) Py_RETURN_NONE; switch (tdstype) { default: { DBINT size = dbconvert(NULL, tdstype, data, (DBINT)ndata, SYBDATETIME, (BYTE*)&dbdatetime, -1); if (-1 == size) { PyErr_Format(PyExc_RuntimeError, "failed to convert DATETIME"); return NULL; } ndata = (size_t)size; data = (const uint8_t*)&dbdatetime; /* Intentional fall-through. */ } #if defined(CTDS_HAVE_TDSTIME) case TDSDATE: case TDSTIME: case TDSDATETIME2: case TDSSMALLDATETIME: #endif /* if defined(CTDS_HAVE_TDSTIME) */ case TDSDATETIME: case TDSDATETIMEN: { int usecond; #if defined(CTDS_HAVE_TDSTIME) DBDATEREC2 dbdaterec; (void)dbanydatecrack(NULL, &dbdaterec, tdstype, data); usecond = dbdaterec.nanosecond / 1000; #else /* if defined(CTDS_HAVE_TDSTIME) */ DBDATEREC dbdaterec; (void)dbdatecrack(NULL, &dbdaterec, (DBDATETIME*)data); usecond = dbdaterec.millisecond * 1000; #endif /* else if defined(CTDS_HAVE_TDSTIME) */ /* If freetds was not compiled with MSDBLIB defined, the month, quarter, day of week are 0-based values. */ if (!s_freetds_msdblib) { dbdaterec.quarter++; dbdaterec.month++; dbdaterec.weekday++; } switch (tdstype) { case TDSDATE: { return PyDate_FromDate_(dbdaterec.year, dbdaterec.month, dbdaterec.day); } case TDSTIME: { return PyTime_FromTime_(dbdaterec.hour, dbdaterec.minute, dbdaterec.second, usecond); } default: { return PyDateTime_FromDateAndTime_(dbdaterec.year, dbdaterec.month, dbdaterec.day, dbdaterec.hour, dbdaterec.minute, dbdaterec.second, usecond); } } break; } } }