mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-22 13:15:12 +00:00
fix: allow assignment of time points of resolutions other than that of a system clock (#2481)
This commit is contained in:
parent
38370a87f4
commit
cc982ac1cd
@ -140,7 +140,7 @@ public:
|
|||||||
}
|
}
|
||||||
else return false;
|
else return false;
|
||||||
|
|
||||||
value = system_clock::from_time_t(std::mktime(&cal)) + msecs;
|
value = time_point_cast<Duration>(system_clock::from_time_t(std::mktime(&cal)) + msecs);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,24 @@
|
|||||||
#include <pybind11/chrono.h>
|
#include <pybind11/chrono.h>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
|
||||||
|
struct different_resolutions {
|
||||||
|
using time_point_h = std::chrono::time_point<
|
||||||
|
std::chrono::system_clock, std::chrono::hours>;
|
||||||
|
using time_point_m = std::chrono::time_point<
|
||||||
|
std::chrono::system_clock, std::chrono::minutes>;
|
||||||
|
using time_point_s = std::chrono::time_point<
|
||||||
|
std::chrono::system_clock, std::chrono::seconds>;
|
||||||
|
using time_point_ms = std::chrono::time_point<
|
||||||
|
std::chrono::system_clock, std::chrono::milliseconds>;
|
||||||
|
using time_point_us = std::chrono::time_point<
|
||||||
|
std::chrono::system_clock, std::chrono::microseconds>;
|
||||||
|
time_point_h timestamp_h;
|
||||||
|
time_point_m timestamp_m;
|
||||||
|
time_point_s timestamp_s;
|
||||||
|
time_point_ms timestamp_ms;
|
||||||
|
time_point_us timestamp_us;
|
||||||
|
};
|
||||||
|
|
||||||
TEST_SUBMODULE(chrono, m) {
|
TEST_SUBMODULE(chrono, m) {
|
||||||
using system_time = std::chrono::system_clock::time_point;
|
using system_time = std::chrono::system_clock::time_point;
|
||||||
using steady_time = std::chrono::steady_clock::time_point;
|
using steady_time = std::chrono::steady_clock::time_point;
|
||||||
@ -53,4 +71,14 @@ TEST_SUBMODULE(chrono, m) {
|
|||||||
m.def("test_nano_timepoint", [](timestamp start, timespan delta) -> timestamp {
|
m.def("test_nano_timepoint", [](timestamp start, timespan delta) -> timestamp {
|
||||||
return start + delta;
|
return start + delta;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Test different resolutions
|
||||||
|
py::class_<different_resolutions>(m, "different_resolutions")
|
||||||
|
.def(py::init<>())
|
||||||
|
.def_readwrite("timestamp_h", &different_resolutions::timestamp_h)
|
||||||
|
.def_readwrite("timestamp_m", &different_resolutions::timestamp_m)
|
||||||
|
.def_readwrite("timestamp_s", &different_resolutions::timestamp_s)
|
||||||
|
.def_readwrite("timestamp_ms", &different_resolutions::timestamp_ms)
|
||||||
|
.def_readwrite("timestamp_us", &different_resolutions::timestamp_us)
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
@ -200,3 +200,13 @@ def test_nano_timepoint():
|
|||||||
time = datetime.datetime.now()
|
time = datetime.datetime.now()
|
||||||
time1 = m.test_nano_timepoint(time, datetime.timedelta(seconds=60))
|
time1 = m.test_nano_timepoint(time, datetime.timedelta(seconds=60))
|
||||||
assert(time1 == time + datetime.timedelta(seconds=60))
|
assert(time1 == time + datetime.timedelta(seconds=60))
|
||||||
|
|
||||||
|
|
||||||
|
def test_chrono_different_resolutions():
|
||||||
|
resolutions = m.different_resolutions()
|
||||||
|
time = datetime.datetime.now()
|
||||||
|
resolutions.timestamp_h = time
|
||||||
|
resolutions.timestamp_m = time
|
||||||
|
resolutions.timestamp_s = time
|
||||||
|
resolutions.timestamp_ms = time
|
||||||
|
resolutions.timestamp_us = time
|
||||||
|
Loading…
Reference in New Issue
Block a user