From 5125287ac73d85722cb9837eaee213add689e7f0 Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Thu, 13 Dec 2018 14:57:42 +0900 Subject: [PATCH] fix datetime conversion use internal duration type in std::chrono::system_clock::time_point --- toml/datetime.hpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/toml/datetime.hpp b/toml/datetime.hpp index 8c6038e..981d230 100644 --- a/toml/datetime.hpp +++ b/toml/datetime.hpp @@ -353,9 +353,13 @@ struct local_datetime operator std::chrono::system_clock::time_point() const { + using internal_duration = + typename std::chrono::system_clock::time_point::duration; // std::mktime returns date as local time zone. no conversion needed - return std::chrono::system_clock::time_point(this->date) + - std::chrono::nanoseconds(this->time); + auto dt = std::chrono::system_clock::time_point(this->date); + dt += std::chrono::duration_cast( + std::chrono::nanoseconds(this->time)); + return dt; } operator std::time_t() const @@ -435,9 +439,12 @@ struct offset_datetime operator std::chrono::system_clock::time_point() const { // get date-time + using internal_duration = + typename std::chrono::system_clock::time_point::duration; std::chrono::system_clock::time_point tp = std::chrono::system_clock::time_point(this->date) + - std::chrono::nanoseconds(this->time); + std::chrono::duration_cast( + std::chrono::nanoseconds(this->time)); // get date-time in UTC. let's say we are in +09:00 (JPN). // writing 12:00:00 in +09:00 means 03:00:00Z. to represent