Commit 1a6052a1 authored by fasiondog's avatar fasiondog
Browse files

update

parent 46ead647
Showing with 59 additions and 3 deletions
+59 -3
import pytest
from datetime import datetime, date
from hikyuu import Datetime
def test_Datetime_init():
assert datetime(2001, 1, 2) == Datetime(20010102).datetime()
assert datetime(2001, 1, 2) == Datetime(2001, 1, 2).datetime()
assert datetime(2001, 1, 2) == Datetime("20010102").datetime()
assert datetime(2001, 1, 2) == Datetime("2001-01-02").datetime()
assert datetime(2001, 1, 2) == Datetime("2001-1-2").datetime()
assert datetime(2001, 1, 2) == Datetime("2001-01-02 0:0:0").datetime()
assert datetime(2001, 1, 2) == Datetime("20010102T000000").datetime()
assert datetime(2001, 1, 2, 3, 4) == Datetime(200101020304).datetime()
...@@ -29,15 +29,15 @@ std::unique_ptr<Datetime> createFromPyDatetime(const py::object& src) { ...@@ -29,15 +29,15 @@ std::unique_ptr<Datetime> createFromPyDatetime(const py::object& src) {
minute = PyDateTime_DATE_GET_MINUTE(src.ptr()); minute = PyDateTime_DATE_GET_MINUTE(src.ptr());
hour = PyDateTime_DATE_GET_HOUR(src.ptr()); hour = PyDateTime_DATE_GET_HOUR(src.ptr());
day = PyDateTime_GET_DAY(src.ptr()); day = PyDateTime_GET_DAY(src.ptr());
month = PyDateTime_GET_MONTH(src.ptr()) - 1; month = PyDateTime_GET_MONTH(src.ptr());
year = PyDateTime_GET_YEAR(src.ptr()); year = PyDateTime_GET_YEAR(src.ptr());
microsecond = PyDateTime_DATE_GET_MICROSECOND(src.ptr()); microsecond = PyDateTime_DATE_GET_MICROSECOND(src.ptr());
} else if (PyDate_Check(src.ptr())) { } else if (PyDate_Check(src.ptr())) {
day = PyDateTime_GET_DAY(src.ptr()); day = PyDateTime_GET_DAY(src.ptr());
month = PyDateTime_GET_MONTH(src.ptr()) - 1; month = PyDateTime_GET_MONTH(src.ptr());
year = PyDateTime_GET_YEAR(src.ptr()); year = PyDateTime_GET_YEAR(src.ptr());
} else { } else {
throw std::exception("Type error!"); throw std::exception("Can't convert, only support datetime to Datetime!");
} }
if (year < 1400) { if (year < 1400) {
...@@ -177,5 +177,47 @@ void export_Datetime(py::module& m) { ...@@ -177,5 +177,47 @@ void export_Datetime(py::module& m) {
return (Py_hash_t)o; return (Py_hash_t)o;
}) })
.def("__eq__", (bool (*)(const Datetime&, const Datetime&)) & operator==)
.def("__eq__",
[](Datetime* date, const py::object& pyd) {
auto pydate = createFromPyDatetime(pyd);
return (*date) == (*pydate);
})
.def("__ne__", (bool (*)(const Datetime&, const Datetime&)) & operator!=)
.def("__ne__",
[](Datetime* date, const py::object& pyd) {
auto pydate = createFromPyDatetime(pyd);
return (*date) != (*pydate);
})
.def("__gt__", (bool (*)(const Datetime&, const Datetime&)) & operator>)
.def("__gt__",
[](Datetime* date, const py::object& pyd) {
auto pydate = createFromPyDatetime(pyd);
return (*date) > (*pydate);
})
.def("__lt__", (bool (*)(const Datetime&, const Datetime&)) & operator<)
.def("__lt__",
[](Datetime* date, const py::object& pyd) {
auto pydate = createFromPyDatetime(pyd);
return (*date) < (*pydate);
})
.def("__ge__", (bool (*)(const Datetime&, const Datetime&)) & operator>=)
.def("__ge__",
[](Datetime* date, const py::object& pyd) {
auto pydate = createFromPyDatetime(pyd);
return (*date) >= (*pydate);
})
.def("__le__", (bool (*)(const Datetime&, const Datetime&)) & operator<=)
.def("__le__",
[](Datetime* date, const py::object& pyd) {
auto pydate = createFromPyDatetime(pyd);
return (*date) <= (*pydate);
})
DEF_PICKLE(Datetime); DEF_PICKLE(Datetime);
} }
\ No newline at end of file
Supports Markdown
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