diff --git a/opm/common/utility/TimeService.hpp b/opm/common/utility/TimeService.hpp index 94a3aa36c..f50fdfe32 100644 --- a/opm/common/utility/TimeService.hpp +++ b/opm/common/utility/TimeService.hpp @@ -20,6 +20,7 @@ #ifndef OPM_TIMESERVICE_HEADER_INCLUDED #define OPM_TIMESERVICE_HEADER_INCLUDED +#include #include namespace Opm { @@ -61,6 +62,7 @@ namespace Opm { int usec_{0}; }; + TimeStampUTC operator+(const TimeStampUTC& lhs, std::chrono::duration delta); std::time_t asTimeT(const TimeStampUTC& tp); } // namespace Opm diff --git a/src/opm/common/utility/TimeService.cpp b/src/opm/common/utility/TimeService.cpp index 9df7ed464..8272c50d3 100644 --- a/src/opm/common/utility/TimeService.cpp +++ b/src/opm/common/utility/TimeService.cpp @@ -75,6 +75,7 @@ Opm::TimeStampUTC& Opm::TimeStampUTC::operator=(const std::time_t tp) return *this; } + Opm::TimeStampUTC::TimeStampUTC(const YMD& ymd) : ymd_{ std::move(ymd) } {} @@ -117,3 +118,9 @@ std::time_t Opm::asTimeT(const TimeStampUTC& tp) return makeUTCTime(timePoint); } + +Opm::TimeStampUTC Opm::operator+(const Opm::TimeStampUTC& lhs, std::chrono::duration delta) { + return Opm::TimeStampUTC( advance(Opm::asTimeT(lhs) , delta.count()) ); +} + + diff --git a/tests/parser/TimeMapTest.cpp b/tests/parser/TimeMapTest.cpp index 466f99eb3..ab3d3aacb 100644 --- a/tests/parser/TimeMapTest.cpp +++ b/tests/parser/TimeMapTest.cpp @@ -619,3 +619,16 @@ Opm::DeckRecord createDeckRecord(int day, const std::string &month, int year, co return deckRecord; } + + +BOOST_AUTO_TEST_CASE(TimeServiceOperatorPlus) { + Opm::TimeStampUTC t0(Opm::TimeMap::mkdatetime(2010,1,1,0,0,0)); + auto t1 = t0 + std::chrono::duration(3600*24 + 0.50); + + BOOST_CHECK_EQUAL(t1.year(), 2010); + BOOST_CHECK_EQUAL(t1.month(), 1); + BOOST_CHECK_EQUAL(t1.day(), 2); + BOOST_CHECK_EQUAL(t1.microseconds(), 500000); +} + +