TimeService.hpp
Go to the documentation of this file.
1/*
2 Copyright 2019 Equinor ASA.
3
4 This file is part of the Open Porous Media Project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20#ifndef OPM_TIMESERVICE_HEADER_INCLUDED
21#define OPM_TIMESERVICE_HEADER_INCLUDED
22
23#include <chrono>
24#include <ctime>
25#include <string>
26#include <unordered_map>
27
28
29namespace Opm {
30
31 using time_point = std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<int64_t, std::ratio<1,1000>>>;
32
33 namespace TimeService {
34 std::time_t to_time_t(const time_point& tp);
35 time_point from_time_t(std::time_t t);
37
38 std::time_t advance(const std::time_t tp, const double sec);
39 std::time_t makeUTCTime(std::tm timePoint);
40 const std::unordered_map<std::string , int>& eclipseMonthIndices();
41 bool valid_month(const std::string& month_name);
42 }
43
45 {
46 public:
47 struct YMD {
48 int year{0};
49 int month{0};
50 int day{0};
51
52 bool operator==(const YMD& data) const
53 {
54 return year == data.year &&
55 month == data.month &&
56 day == data.day;
57 }
58
59 template<class Serializer>
60 void serializeOp(Serializer& serializer)
61 {
62 serializer(year);
63 serializer(month);
64 serializer(day);
65 }
66 };
67
68 TimeStampUTC() = default;
69
70 explicit TimeStampUTC(const std::time_t tp);
71 explicit TimeStampUTC(const YMD& ymd);
72 TimeStampUTC(int year, int month, int day);
74 int hour,
75 int minutes,
76 int seconds,
77 int usec);
78
79 TimeStampUTC& operator=(const std::time_t tp);
80 bool operator==(const TimeStampUTC& data) const;
81
82 TimeStampUTC& hour(const int h);
83 TimeStampUTC& minutes(const int m);
84 TimeStampUTC& seconds(const int s);
85 TimeStampUTC& microseconds(const int us);
86
87 const YMD& ymd() const { return ymd_; }
88 int year() const { return this->ymd_.year; }
89 int month() const { return this->ymd_.month; }
90 int day() const { return this->ymd_.day; }
91 int hour() const { return this->hour_; }
92 int minutes() const { return this->minutes_; }
93 int seconds() const { return this->seconds_; }
94 int microseconds() const { return this->usec_; }
95
96 template<class Serializer>
97 void serializeOp(Serializer& serializer)
98 {
99 ymd_.serializeOp(serializer);
100 serializer(hour_);
101 serializer(minutes_);
102 serializer(seconds_);
103 serializer(usec_);
104 }
105
106 private:
107
108 YMD ymd_{};
109 int hour_{0};
110 int minutes_{0};
111 int seconds_{0};
112 int usec_{0};
113 };
114
115 TimeStampUTC operator+(const TimeStampUTC& lhs, std::chrono::duration<double> delta);
116 std::time_t asTimeT(const TimeStampUTC& tp);
117 std::time_t asLocalTimeT(const TimeStampUTC& tp);
118
119} // namespace Opm
120
121#endif // OPM_TIMESERVICE_HEADER_INCLUDED
const char *const string
Definition: cJSON.h:170
Definition: Serializer.hpp:38
Definition: TimeService.hpp:45
TimeStampUTC & minutes(const int m)
int minutes() const
Definition: TimeService.hpp:92
int month() const
Definition: TimeService.hpp:89
TimeStampUTC & microseconds(const int us)
TimeStampUTC & hour(const int h)
int microseconds() const
Definition: TimeService.hpp:94
int hour() const
Definition: TimeService.hpp:91
TimeStampUTC(const std::time_t tp)
TimeStampUTC(const YMD &ymd)
TimeStampUTC & operator=(const std::time_t tp)
TimeStampUTC & seconds(const int s)
int day() const
Definition: TimeService.hpp:90
void serializeOp(Serializer &serializer)
Definition: TimeService.hpp:97
bool operator==(const TimeStampUTC &data) const
int seconds() const
Definition: TimeService.hpp:93
int year() const
Definition: TimeService.hpp:88
TimeStampUTC(int year, int month, int day)
const YMD & ymd() const
Definition: TimeService.hpp:87
TimeStampUTC(const YMD &ymd, int hour, int minutes, int seconds, int usec)
TimeStampUTC()=default
time_point now()
std::time_t makeUTCTime(std::tm timePoint)
bool valid_month(const std::string &month_name)
time_point from_time_t(std::time_t t)
std::time_t advance(const std::time_t tp, const double sec)
std::time_t to_time_t(const time_point &tp)
const std::unordered_map< std::string, int > & eclipseMonthIndices()
Definition: A.hpp:4
std::time_t asTimeT(const TimeStampUTC &tp)
std::chrono::time_point< std::chrono::system_clock, std::chrono::duration< int64_t, std::ratio< 1, 1000 > > > time_point
Definition: TimeService.hpp:31
std::time_t asLocalTimeT(const TimeStampUTC &tp)
TimeStampUTC operator+(const TimeStampUTC &lhs, std::chrono::duration< double > delta)
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t t(t+t)") define_sfop3(16
static std::string data()
Definition: exprtk.hpp:40022
Definition: TimeService.hpp:47
int month
Definition: TimeService.hpp:49
int day
Definition: TimeService.hpp:50
void serializeOp(Serializer &serializer)
Definition: TimeService.hpp:60
bool operator==(const YMD &data) const
Definition: TimeService.hpp:52
int year
Definition: TimeService.hpp:48