| | 1693 | // helper function for date property funcs |
|---|
| | 1694 | static int |
|---|
| | 1695 | DateObject_set_date_info_wtime(DateObject *self, struct date_info *dinfo) { |
|---|
| | 1696 | PyObject *daily_obj = DateObject_toordinal(self); |
|---|
| | 1697 | long absdate = PyInt_AsLong(daily_obj); |
|---|
| | 1698 | double abstime; |
|---|
| | 1699 | |
|---|
| | 1700 | Py_DECREF(daily_obj); |
|---|
| | 1701 | |
|---|
| | 1702 | abstime = getAbsTime(self->freq, absdate, self->value); |
|---|
| | 1703 | |
|---|
| | 1704 | if(dInfoCalc_SetFromAbsDateTime(dinfo, absdate, abstime, |
|---|
| | 1705 | GREGORIAN_CALENDAR)) return -1; |
|---|
| | 1706 | |
|---|
| | 1707 | return 0; |
|---|
| | 1708 | } |
|---|
| | 1709 | |
|---|
| | 1710 | static PyObject * |
|---|
| | 1711 | DateObject_datetime(DateObject *self, void *closure) { |
|---|
| | 1712 | PyObject *datetime; |
|---|
| | 1713 | int hour=0, minute=0, second=0; |
|---|
| | 1714 | int freq_group; |
|---|
| | 1715 | struct date_info dinfo; |
|---|
| | 1716 | |
|---|
| | 1717 | if(DateObject_set_date_info_wtime(self, &dinfo) == -1) return NULL; |
|---|
| | 1718 | freq_group = get_freq_group(self->freq); |
|---|
| | 1719 | |
|---|
| | 1720 | switch(freq_group) { |
|---|
| | 1721 | case FR_HR: |
|---|
| | 1722 | hour = dinfo.hour; |
|---|
| | 1723 | break; |
|---|
| | 1724 | case FR_MIN: |
|---|
| | 1725 | hour = dinfo.hour; |
|---|
| | 1726 | minute = dinfo.minute; |
|---|
| | 1727 | break; |
|---|
| | 1728 | case FR_SEC: |
|---|
| | 1729 | hour = dinfo.hour; |
|---|
| | 1730 | minute = dinfo.minute; |
|---|
| | 1731 | second = (int)dinfo.second; |
|---|
| | 1732 | break; |
|---|
| | 1733 | } |
|---|
| | 1734 | |
|---|
| | 1735 | datetime = PyDateTime_FromDateAndTime( |
|---|
| | 1736 | dinfo.year, dinfo.month, dinfo.day, hour, minute, second, 0); |
|---|
| | 1737 | return datetime; |
|---|
| | 1738 | } |
|---|
| | 1739 | |
|---|
| 1744 | | abstime = getAbsTime(self->freq, absdate, self->value); |
|---|
| 1745 | | |
|---|
| 1746 | | if(dInfoCalc_SetFromAbsDateTime(&tempDate, absdate, abstime, |
|---|
| 1747 | | GREGORIAN_CALENDAR)) return NULL; |
|---|
| 1748 | | |
|---|
| 1749 | | // populate standard C date struct with info from our date_info struct |
|---|
| 1750 | | c_date.tm_sec = (int)tempDate.second; |
|---|
| 1751 | | c_date.tm_min = tempDate.minute; |
|---|
| 1752 | | c_date.tm_hour = tempDate.hour; |
|---|
| 1753 | | c_date.tm_mday = tempDate.day; |
|---|
| 1754 | | c_date.tm_mon = tempDate.month - 1; |
|---|
| 1755 | | c_date.tm_year = tempDate.year - 1900; |
|---|
| 1756 | | c_date.tm_wday = tempDate.day_of_week; |
|---|
| 1757 | | c_date.tm_yday = tempDate.day_of_year; |
|---|
| 1758 | | c_date.tm_isdst = -1; |
|---|
| 1759 | | |
|---|
| 1760 | | result_len = strlen(orig_fmt_str) + 50; |
|---|
| 1761 | | if ((result = PyArray_malloc(result_len * sizeof(char))) == NULL) {return PyErr_NoMemory();} |
|---|
| 2095 | | // helper function for date property funcs |
|---|
| 2096 | | static int |
|---|
| 2097 | | DateObject_set_date_info_wtime(DateObject *self, struct date_info *dinfo) { |
|---|
| 2098 | | PyObject *daily_obj = DateObject_toordinal(self); |
|---|
| 2099 | | long absdate = PyInt_AsLong(daily_obj); |
|---|
| 2100 | | double abstime; |
|---|
| 2101 | | |
|---|
| 2102 | | Py_DECREF(daily_obj); |
|---|
| 2103 | | |
|---|
| 2104 | | abstime = getAbsTime(self->freq, absdate, self->value); |
|---|
| 2105 | | |
|---|
| 2106 | | if(dInfoCalc_SetFromAbsDateTime(dinfo, absdate, abstime, |
|---|
| 2107 | | GREGORIAN_CALENDAR)) return -1; |
|---|
| 2108 | | |
|---|
| 2109 | | return 0; |
|---|
| 2110 | | } |
|---|
| 2111 | | |
|---|
| 2214 | | } |
|---|
| 2215 | | |
|---|
| 2216 | | static PyObject * |
|---|
| 2217 | | DateObject_datetime(DateObject *self, void *closure) { |
|---|
| 2218 | | PyObject *datetime; |
|---|
| 2219 | | int hour=0, minute=0, second=0; |
|---|
| 2220 | | int freq_group; |
|---|
| 2221 | | struct date_info dinfo; |
|---|
| 2222 | | |
|---|
| 2223 | | if(DateObject_set_date_info_wtime(self, &dinfo) == -1) return NULL; |
|---|
| 2224 | | freq_group = get_freq_group(self->freq); |
|---|
| 2225 | | |
|---|
| 2226 | | switch(freq_group) { |
|---|
| 2227 | | case FR_HR: |
|---|
| 2228 | | hour = dinfo.hour; |
|---|
| 2229 | | break; |
|---|
| 2230 | | case FR_MIN: |
|---|
| 2231 | | hour = dinfo.hour; |
|---|
| 2232 | | minute = dinfo.minute; |
|---|
| 2233 | | break; |
|---|
| 2234 | | case FR_SEC: |
|---|
| 2235 | | hour = dinfo.hour; |
|---|
| 2236 | | minute = dinfo.minute; |
|---|
| 2237 | | second = (int)dinfo.second; |
|---|
| 2238 | | break; |
|---|
| 2239 | | } |
|---|
| 2240 | | |
|---|
| 2241 | | datetime = PyDateTime_FromDateAndTime( |
|---|
| 2242 | | dinfo.year, dinfo.month, dinfo.day, hour, minute, second, 0); |
|---|
| 2243 | | return datetime; |
|---|