isce3 0.25.0
Loading...
Searching...
No Matches
DateTime.h
1//-*- C++ -*-
2//-*- coding: utf-8 -*-
3//
4//
5// Author: Piyush Agram
6// Copyright 2017-2018
7
8#pragma once
9
10#include "forward.h"
11
12#include <cassert>
13#include <cmath>
14#include <iostream>
15#include <string>
16
19public:
20 int year;
21 int months;
22 int days;
23 int hours;
24 int minutes;
25 int seconds;
26 double frac;
27
31 DateTime() : DateTime(1970, 1, 1) {};
32
34 DateTime(double ord);
35
37 DateTime(int yy, int mm, int dd);
38
40 DateTime(int yy, int mm, int dd, int hh, int mn, int ss);
41
43 DateTime(int yy, int mm, int dd, int hh, int mn, double ss);
44
46 DateTime(int yy, int mm, int dd, int hh, int mn, int ss, double ff);
47
49 DateTime(const DateTime& ts);
50
59 explicit DateTime(const std::string&);
60
62 void _init(int yy, int mm, int dd, int hh, int mn, int ss, double ff);
63 void _normalize_time();
64 void _normalize_date();
65 void _normalize();
67
68 explicit operator std::string() const { return isoformat(); }
69
70 // Comparison operators
71 bool operator<(const DateTime& ts) const;
72 bool operator>(const DateTime& ts) const;
73 bool operator<=(const DateTime& ts) const;
74 bool operator>=(const DateTime& ts) const;
75 bool operator==(const DateTime& ts) const;
76 bool operator!=(const DateTime& ts) const;
77
78 // Math operators
79 DateTime& operator=(const DateTime& ts);
80 DateTime& operator+=(const TimeDelta& ts);
81 DateTime& operator+=(const double& s);
82 DateTime& operator-=(const TimeDelta& ts);
83 DateTime& operator-=(const double& s);
84
85 DateTime operator+(const TimeDelta& ts) const;
86 DateTime operator+(const double& s) const;
87 DateTime operator-(const TimeDelta& ts) const;
88 DateTime operator-(const double& s) const;
89
90 TimeDelta operator-(const DateTime& ts) const;
91
93 bool isClose(const DateTime& ts) const;
94
99 bool isClose(const DateTime& ts, const TimeDelta& errtol) const;
100
102 int dayOfYear() const;
103
105 double secondsOfDay() const;
106
108 int dayOfWeek() const;
109
111 double ordinal() const;
112
114 double secondsSinceEpoch() const;
115
117 double secondsSinceEpoch(const DateTime&) const;
118
120 void secondsSinceEpoch(double);
121
123 std::string isoformat() const;
124
132 void strptime(std::string);
133
142 static bool isIsoFormat(const std::string& datetime_str);
143};
144
145// Some constants
146namespace isce3 { namespace core {
147
148std::ostream& operator<<(std::ostream&, const DateTime&);
149
150// Constants for default constructors
151const DateTime MIN_DATE_TIME = DateTime(1970, 1, 1);
152const std::string UNINITIALIZED_STRING = "uninitialized";
153
154static const int DaysInMonths[] = {31, 28, 31, 30, 31, 30,
155 31, 31, 30, 31, 30, 31};
156
157static const int DaysBeforeMonths[] = {0, 31, 59, 90, 120, 151,
158 181, 212, 243, 273, 304, 334};
159static const int DAY_TO_YEAR = 365;
160static const int DAYSPER100 = 36524;
161static const int DAYSPER400 = 146097;
162static const int DAYSPER4 = 1461;
163static const int MAXORDINAL = 3652059;
164
165inline constexpr double TOL_SECONDS = 1e-9;
166
167// time section and fractional seconds are optional
168// to support trailing white space, add ( )* to the
169// end of ISOFMT8601
170static constexpr auto ISOFMT8601 =
171 "[1-9][0-9]{3}-[0-1][0-9]-[0-3][0-9](|(T| "
172 ")[0-2][0-9]:[0-5][0-9]:[0-6][0-9](|(\\.|\\:|\\,)([0-9]*)))";
173
174// Handful of utility functions
175bool _is_leap(int);
176int _days_in_month(int, int);
177int _days_before_year(int);
178int _days_before_month(int, int);
179int _ymd_to_ord(int, int, int);
180void _ord_to_ymd(int, int&, int&, int&);
181}} // namespace isce3::core
Data structure to store date time to nano-sec precision.
Definition DateTime.h:18
Data structure to store TimeDelta to double precision seconds.
Definition TimeDelta.h:16
Data structure to store date time to nano-sec precision.
Definition DateTime.h:18
DateTime()
Default constructor.
Definition DateTime.h:31
int dayOfYear() const
Return day of year.
double secondsSinceEpoch() const
Return ordinal - time since GPS time origin.
Definition DateTime.cpp:379
double ordinal() const
Return ordinal - time since GPS time origin.
static bool isIsoFormat(const std::string &datetime_str)
Check if a format is supported iso8601.
Definition DateTime.cpp:436
std::string isoformat() const
Return date formatted as ISO-8601 string.
Definition DateTime.cpp:393
bool isClose(const DateTime &ts) const
Check whether two DateTimes are equivalent to within TOL_SECONDS.
Definition DateTime.cpp:345
int dayOfWeek() const
Return day of week.
double secondsOfDay() const
Return seconds of day.
Definition DateTime.cpp:359
void strptime(std::string)
Parse a given string in ISO-8601 format String can be date only "YYYY-MM-DD" or datetime w/o fraction...
Definition DateTime.cpp:409
base interpolator is an abstract base class
Definition BinarySearchFunc.cpp:5

Generated for ISCE3.0 by doxygen 1.13.2.