102 typedef enum RND_TYPE {
117 Date(
const double& in_timezone);
118 Date(
const double& julian_in,
const double& in_timezone);
119 Date(
const int& year,
const int& month,
const int& day,
const int& hour,
const int& minute,
const double& in_timezone);
120 Date(
const int& year,
const int& month,
const int& day,
const int& hour,
const int& minute,
const int& second,
const double& in_timezone);
121 Date(
const int& year,
const int& month,
const int& day,
const int& hour,
const int& minute,
const double& second,
const double& in_timezone);
123 Date(
const int& year,
const double& jdn,
const double& in_timezone);
128 void setDate(
const double& julian_in,
const double& in_timezone);
129 void setDate(
const int& year,
const int& month,
const int& day,
const int& hour,
const int& minute,
const double& in_timezone);
130 void setDate(
const int& year,
const int& month,
const int& day,
const int& hour,
const int& minute,
const int& second,
const double& in_timezone);
131 void setDate(
const int& year,
const int& month,
const int& day,
const int& hour,
const int& minute,
const double& second,
const double& in_timezone);
132 void setDate(
const int& year,
const unsigned int& month,
const unsigned int& day,
const unsigned int& hour,
const unsigned int& minute,
const double& in_timezone);
133 void setDate(
const int& year,
const unsigned int& month,
const unsigned int& day,
const unsigned int& hour,
const unsigned int& minute,
const unsigned int& second,
const double& in_timezone);
134 void setDate(
const int& year,
const unsigned int& month,
const unsigned int& day,
const unsigned int& hour,
const unsigned int& minute,
const double& second,
const double& in_timezone);
135 void setDate(
const int& year,
const double& jdn,
const double& in_timezone);
136 void setDate(
const time_t& in_time);
138 void setRFC868Date(
const double& julian_in,
const double& in_timezone);
140 void setExcelDate(
const double excel_in,
const double& in_timezone);
141 void setMatlabDate(
const double matlab_in,
const double& in_timezone);
142 void setUndef(
const bool& flag=
true);
146 double getJulian(
const bool& gmt=
false)
const;
154 void getDate(
double& julian_out,
const bool& gmt=
false)
const;
155 void getDate(
int& year,
int& month,
int& day,
const bool& gmt=
false)
const;
156 void getDate(
int& year,
int& month,
int& day,
int& hour,
const bool& gmt=
false)
const;
157 void getDate(
int& year,
int& month,
int& day,
int& hour,
int& minute,
const bool& gmt=
false)
const;
158 void getDate(
int& year,
int& month,
int& day,
int& hour,
int& minute,
double& second,
const bool& gmt=
false)
const;
159 void getDate(
int& year,
int& month,
int& day,
int& hour,
int& minute,
int& second,
const bool& gmt=
false)
const;
160 void getTime(
int& hour_out,
int& minute_out,
const bool& gmt=
false)
const;
161 void getTime(
int& hour_out,
int& minute_out,
double& second_out,
const bool& gmt=
false)
const;
162 int getYear(
const bool& gmt=
false)
const;
164 unsigned short getDayOfWeek(
const bool& gmt=
false)
const;
165 unsigned short getISOWeekNr(
const bool& gmt=
false)
const;
166 unsigned short getISOWeekNr(
int &ISO_year,
const bool& gmt=
false)
const;
171 static unsigned int mod(
const double& julian,
const unsigned int& seconds);
172 static unsigned int mod(
const Date& indate,
const unsigned int& seconds);
173 static double rnd(
const double& julian,
const double& precision,
const RND& type=
CLOSEST);
176 static double parseTimeZone(
const std::string& timezone_iso);
179 const std::string
toString(
const FORMATS& type,
const bool& gmt=
false)
const;
181 friend std::ostream&
operator<<(std::ostream& os,
const Date& date);
213 double localToGMT(
const double& in_julian)
const;
214 double GMTToLocal(
const double& in_gmt_julian)
const;
215 static double calculateJulianDate(
const int& in_year,
const int& in_month,
const int& in_day,
const int& in_hour,
const int& in_minute,
const double& i_second);
216 static void calculateDate(
const double& i_julian,
int& out_year,
int& out_month,
int& out_day);
217 static void calculateTime(
const double& i_julian,
int& o_hour,
int& o_minute,
double& o_second);
218 static void calculateValues(
const double& i_julian,
int& out_year,
int& out_month,
int& out_day,
int& out_hour,
int& out_minute,
double& o_second);
221 static void plausibilityCheck(
const int& in_year,
const int& in_month,
const int& in_day,
const int& in_hour,
const int& in_minute,
const double& in_second);
248 void setRange(
const std::string& range_spec,
const double& tz);
306 static Date parseDateHint(
const std::string& Date_str,
const double tz,
const bool& early_interpretation);
#define AT
Definition: IOExceptions.h:28
A class to represent and handle date ranges. They can be sorted, checked for uniqueness and a date ca...
Definition: Date.h:241
DateRange()
Definition: Date.h:243
bool operator<(const DateRange &a) const
Definition: Date.h:290
DateRange(const std::string &range_spec, const double &tz)
Definition: Date.h:246
Date end
Definition: Date.h:303
bool operator<(const Date &a) const
Is the range before the provided date?
Definition: Date.h:275
Date start
Definition: Date.h:303
bool hasOverlap(const Date &i_start, const Date &i_end) const
Is the provided date range within the current range?
Definition: Date.cc:1483
bool isUndef() const
Definition: Date.h:250
bool operator==(const DateRange &a) const
Definition: Date.h:296
bool operator>(const Date &a) const
Is the range after the provided date?
Definition: Date.h:285
DateRange(const Date &d1, const Date &d2)
Definition: Date.h:244
const std::string toString() const
Definition: Date.h:301
bool in(const Date &a) const
Is the provided date within the current range?
Definition: Date.h:257
void setRange(const std::string &range_spec, const double &tz)
Set the date range from a provided date range string (at most daily resolution)
Definition: Date.cc:1464
A class to handle timestamps. This class handles conversion between different time display formats (I...
Definition: Date.h:87
double GMTToLocal(const double &in_gmt_julian) const
Definition: Date.cc:1408
void setModifiedJulianDate(const double &julian_in, const double &in_timezone)
Set date from a modified julian date (MJD).
Definition: Date.cc:351
double gmt_julian
Definition: Date.h:229
bool isLeapYear() const
Return true if the current year is a leap year.
Definition: Date.cc:799
bool operator>=(const Date &) const
Definition: Date.cc:986
static double calculateJulianDate(const int &in_year, const int &in_month, const int &in_day, const int &in_hour, const int &in_minute, const double &i_second)
Definition: Date.cc:1283
static void calculateTime(const double &i_julian, int &o_hour, int &o_minute, double &o_second)
Calculate the time components (y,m,d) from a given julian date.
Definition: Date.cc:1329
static void calculateValues(const double &i_julian, int &out_year, int &out_month, int &out_day, int &out_hour, int &out_minute, double &o_second)
Definition: Date.cc:1341
static const int daysLeapYear[]
Definition: Date.h:225
double getExcelDate(const bool &gmt=false) const
Return Excel date. The (sick) Excel date is defined as the number of days since 1900-01-00T00:00 (no,...
Definition: Date.cc:508
static const double Excel_offset
offset between julian date and Excel dates (note that excel invented some days...)
Definition: Date.h:112
void getDate(double &julian_out, const bool &gmt=false) const
Retrieve julian date. This method is a candidate for deletion: it should now be obsolete.
Definition: Date.cc:546
static const double MJD_offset
offset between julian date and modified julian date
Definition: Date.h:109
bool operator<=(const Date &) const
Definition: Date.cc:960
void getTime(int &hour_out, int &minute_out, const bool &gmt=false) const
Return time of the day.
Definition: Date.cc:575
const Date operator+(const Date &) const
Definition: Date.cc:999
double getModifiedJulianDate(const bool &gmt=false) const
Return modified julian date (MJD). The modified julian date is defined as the fractional number of da...
Definition: Date.cc:434
unsigned short getDayOfWeek(const bool &gmt=false) const
Return the day of the week for the current date. The day of the week is between 1 (Monday) and 7 (Sun...
Definition: Date.cc:684
static double parseTimeZone(const std::string &timezone_iso)
Parse an ISO 8601 formatted time zone specification. Time zones MUST be specified right after a date/...
Definition: Date.cc:1062
static unsigned int mod(const double &julian, const unsigned int &seconds)
Modulus of a julian date by a given number of seconds. This returns the modulus (in seconds) of a giv...
Definition: Date.cc:813
double localToGMT(const double &in_julian) const
Definition: Date.cc:1403
void setTimeZone(const double &in_timezone)
Set timezone and Daylight Saving Time flag.
Definition: Date.cc:218
void setMatlabDate(const double matlab_in, const double &in_timezone)
Set date from an Matlab date.
Definition: Date.cc:392
const Date operator/(const double &) const
Definition: Date.cc:1042
static double rnd(const double &julian, const double &precision, const RND &type=CLOSEST)
Round a julian date to a given precision. If you want to round a local date, do NOT provide it as gmt...
Definition: Date.cc:841
static const double Unix_offset
offset between julian date and Unix Epoch time
Definition: Date.h:111
time_t getUnixDate() const
Return Unix time (or POSIX time). The Unix time is defined as the number of seconds since 1970-01-01T...
Definition: Date.cc:490
void setFromSys()
Set internal gmt time from system time as well as system time zone.
Definition: Date.cc:201
static std::map< std::string, double > TZAbbrev
Definition: Date.h:224
Date & operator+=(const Date &)
Definition: Date.cc:883
Date & operator*=(const double &)
Definition: Date.cc:919
void setUnixDate(const time_t &in_time)
Set date from a Unix date.
Definition: Date.cc:370
double getTimeZone() const
Returns timezone.
Definition: Date.cc:403
const std::string toString(const FORMATS &type, const bool &gmt=false) const
Return a nicely formated string.
Definition: Date.cc:1145
FORMATS
Keywords for selecting the date formats (the subsecond resolution is dropped when not needed)
Definition: Date.h:90
@ ISO_TZ
ISO 8601 format (same as ISO) but with time zone specification.
Definition: Date.h:92
@ ISO_Z
ISO 8601 format, forcing GMT and Zulu (Z) timezone specification.
Definition: Date.h:93
@ ISO_DATE
ISO 8601 date format without the time (ie YYYY-MM-DD)
Definition: Date.h:98
@ ISO
ISO 8601 extended format combined date: YYYY-MM-DDTHH:mm:SS.sss (fields might be dropped,...
Definition: Date.h:91
@ ISO_WEEK
ISO 8601 week date: YYYY-Www-D (for example: 2014-W41-1)
Definition: Date.h:97
@ NUM
ISO 8601 basic format date: YYYYMMDDHHmmSS (fields might be dropped, in the least to the most signifi...
Definition: Date.h:95
@ FULL
ISO 8601 followed by the julian date (in parenthesis)
Definition: Date.h:94
@ DIN
DIN5008 format: DD.MM.YYYY HH:MM:SS.sss.
Definition: Date.h:96
static const double epsilon_sec
Definition: Date.h:114
unsigned short getISOWeekNr(const bool &gmt=false) const
Return the ISO 8601 week number The week number range from 1 to 53 for a leap year....
Definition: Date.cc:767
RND
Keywords for selecting rounding strategy.
Definition: Date.h:102
@ CLOSEST
rounding toward closest
Definition: Date.h:105
@ DOWN
rounding toward smallest absolute value
Definition: Date.h:104
@ UP
rounding toward highest absolute value
Definition: Date.h:103
friend std::ostream & operator<<(std::ostream &os, const Date &date)
Definition: Date.cc:1268
bool undef
Definition: Date.h:230
static const double Matlab_offset
offset between julian date and Matlab dates
Definition: Date.h:113
static std::string printFractionalDay(const double &fractional)
Nicely format an hour given as fractional day into a human readable hour.
Definition: Date.cc:1125
Date & operator/=(const double &)
Definition: Date.cc:927
bool operator<(const Date &) const
Definition: Date.cc:947
const Date operator*(const double &) const
Definition: Date.cc:1035
static const double RFC868_offset
offset between julian date and RFC868 time (ref is 1900-01-01T00:00 GMT)
Definition: Date.h:110
static void calculateDate(const double &i_julian, int &out_year, int &out_month, int &out_day)
Calculate the date components (y,m,d) from a given julian date.
Definition: Date.cc:1300
const std::string toString() const
Definition: Date.cc:1245
double timezone
Definition: Date.h:228
void setRFC868Date(const double &julian_in, const double &in_timezone)
Set date from an RFC868 date (time since 1900-01-01T00:00 GMT, valid until 2036).
Definition: Date.cc:361
int getJulianDayNumber(const bool &gmt=false) const
Return the julian day for the current date. Return the day of the year index for the current Date obj...
Definition: Date.cc:779
Date()
Default constructor: timezone is set to GMT without DST, julian date is set to 0 (meaning -4713-01-01...
Definition: Date.cc:117
bool operator==(const Date &) const
Definition: Date.cc:935
double getJulian(const bool &gmt=false) const
Return julian date (JD). The julian date is defined as the fractional number of days since -4713-01-0...
Definition: Date.cc:416
double getRFC868Date(const bool &gmt=false) const
Return RFC868 date. The RFC868 date is defined as the fractional number of days since 1900-01-01T00:0...
Definition: Date.cc:451
static void plausibilityCheck(const int &in_year, const int &in_month, const int &in_day, const int &in_hour, const int &in_minute, const double &in_second)
Definition: Date.cc:1371
Date & operator-=(const Date &)
Definition: Date.cc:893
static const bool __init
Definition: Date.h:227
static const int daysNonLeapYear[]
Definition: Date.h:226
void setExcelDate(const double excel_in, const double &in_timezone)
Set date from an Excel date.
Definition: Date.cc:380
static const double DST_shift
Definition: Date.h:108
double getMatlabDate(const bool &gmt=false) const
Return Matlab date. This is the number of days since 0000-01-01T00:00:00. See http://www....
Definition: Date.cc:528
bool operator>(const Date &) const
Definition: Date.cc:973
bool operator!=(const Date &) const
Definition: Date.cc:943
void setDate(const Date &in_date)
Copy setter.
Definition: Date.cc:231
int getYear(const bool &gmt=false) const
Return year.
Definition: Date.cc:558
const Date operator-(const Date &) const
Definition: Date.cc:1010
double getTruncatedJulianDate(const bool &gmt=false) const
Return truncated julian date (TJD). The truncated julian date is defined as the julian day shifted to...
Definition: Date.cc:470
static int getNumberOfDaysInMonth(const int &ISO_year, const int &month)
Return the number of days of the given month for the given year The returned day is between 28 (ferbu...
Definition: Date.cc:702
static const double epsilon
minimum difference between two dates in days. 3600.025 is intentional to support high sampling rates
Definition: Date.h:210
void setUndef(const bool &flag=true)
Definition: Date.cc:194
static bool initStaticData()
initialize the static map TZAbbrev
Definition: Date.cc:66
friend std::istream & operator>>(std::istream &is, Date &date)
Definition: Date.cc:1275
bool isUndef() const
Definition: Date.h:144
thrown when encountered an unexpected function's argument (e.g. bad index, bad or missing parameter n...
Definition: IOExceptions.h:130
Date Duration
Definition: Date.h:311