MDAL
mdal_datetime.hpp
1 /*
2  MDAL - Mesh Data Abstraction Library (MIT License)
3  Copyright (C) 2019 Vincent Cloarec (vcloarec at gmail dot com)
4 */
5 
6 #ifndef MDAL_DATE_TIME_HPP
7 #define MDAL_DATE_TIME_HPP
8 
9 #include <string>
10 #include <vector>
11 
12 #include "mdal.h"
13 
14 namespace MDAL
15 {
16 
18  {
19  public:
20  enum Unit
21  {
22  milliseconds = 0,
23  seconds,
24  minutes,
25  hours,
26  days,
27  weeks,
28  months_CF,
29  exact_years
30  };
31 
33  RelativeTimestamp( double duration, Unit unit );
34 
35  double value( Unit unit ) const;
36 
37  bool operator==( const RelativeTimestamp &other ) const;
38  bool operator<( const RelativeTimestamp &other ) const;
39 
40  private:
41  RelativeTimestamp( int64_t ms );
42  int64_t mDuration = 0; //in ms
43 
44  friend class DateTime;
45  };
46 
47  class DateTime
48  {
49  public:
50 
51  enum Calendar
52  {
53  Gregorian = 0,
54  ProlepticGregorian,
55  Julian,
56  };
57 
58  enum Epoch
59  {
60  Unix = 0,
61  JulianDay
62  };
63 
64  DateTime();
66  DateTime( int year, int month, int day, int hours = 0, int minutes = 0, double seconds = 0, Calendar calendar = Gregorian );
68  DateTime( double value, Epoch epoch );
69 
71  DateTime( const std::string &fromISO8601 );
72 
75  std::string toStandardCalendarISO8601() const;
76 
78  double toJulianDay() const;
79 
81  std::string toJulianDayString() const;
82 
84  std::vector<int> expandToCalendarArray() const;
85 
87  RelativeTimestamp operator-( const DateTime &other ) const;
88  DateTime operator+( const RelativeTimestamp &duration ) const;
89  DateTime operator-( const RelativeTimestamp &duration ) const;
90  bool operator==( const DateTime &other ) const;
91  bool operator<( const DateTime &other ) const;
92 
93  bool isValid() const;
94 
95  private:
96 
97  struct DateTimeValues
98  {
99  int year;
100  int month;
101  int day;
102  int hours;
103  int minutes;
104  double seconds;
105  };
106 
107  DateTime( int64_t julianTime );
108 
109  DateTimeValues dateTimeGregorianProleptic() const;
110 
111  void setWithGregorianCalendarDate( DateTimeValues values );
112  void setWithJulianCalendarDate( DateTimeValues values );
113  void setWithGregorianJulianCalendarDate( DateTimeValues values );//Uses the adapted formula depending of the date (< or > 1582-10-15)
114 
115  std::string toString( DateTimeValues values ) const;
116 
117  int64_t mJulianTime = 0; //Julian day in ms
118 
119  bool mValid = false;
120  };
121 }
122 
123 #endif // MDAL_DATE_TIME_HPP
Definition: mdal_datetime.hpp:48
std::string toJulianDayString() const
Returns the Julain day value expressed with a string.
Definition: mdal_datetime.cpp:100
RelativeTimestamp operator-(const DateTime &other) const
operators
Definition: mdal_datetime.cpp:322
double toJulianDay() const
Returns the Julian day value.
Definition: mdal_datetime.cpp:95
std::string toStandardCalendarISO8601() const
Returns a string with the date/time expressed in Greogrian proleptic calendar with ISO8601 format (lo...
Definition: mdal_datetime.cpp:83
std::vector< int > expandToCalendarArray() const
Returns a array of int with {year,month,day,hours,minutes,seconds} with standard calendar format.
Definition: mdal_datetime.cpp:105
Definition: mdal_datetime.hpp:18