42 #if defined(_WIN32) || defined(_WIN64)
46 #include "time_delta.h"
47 #include "unix_time.h"
48 #include "datetime_parser.h"
49 #include "datetime_constants.h"
50 #include "datetime_exceptions.h"
60 time_t m_unixTime = 0;
71 Datetime(
const std::string ×tamp,
const std::string &format,
const bool &
isUTC =
false)
74 setDateTime(timestamp, format);
77 Datetime(
const std::string ×tamp,
const char *format,
const bool &
isUTC =
false)
80 setDateTime(timestamp, format);
83 Datetime(
const char *timestamp,
const std::string &format,
const bool &
isUTC =
false)
86 setDateTime(timestamp, format);
89 Datetime(
const char *timestamp,
const char *format,
const bool &
isUTC =
false)
92 setDateTime(timestamp, format);
103 setDateTime(timestamp, DatetimeConstants::DEFAULT_INPUT_FORMAT);
109 setDateTime(timestamp, DatetimeConstants::DEFAULT_INPUT_FORMAT);
120 m_unixTime = MyTM::my_mktime(
datetime, m_isUTC);
135 m_isUTC = original.m_isUTC;
136 m_unixTime = original.m_unixTime;
149 const int &
hour,
const int &min,
const int &
sec,
150 const bool &
isUTC =
false)
156 datetime.tm_year =
year - DatetimeConstants::TM_BASE_YEAR;
157 datetime.tm_mon = mon - DatetimeConstants::MONTH_OFFSET;
168 m_unixTime = MyTM::my_mktime(
datetime, m_isUTC);
201 validateInput(m_unixTime);
202 return MyTM::my_mkStructTm(m_unixTime, m_isUTC);
212 return m_parser.time2str(
structTm());
220 std::string
str(
const std::string &format)
const
222 return m_parser.time2str(
structTm(), format);
230 std::string
str(
const char *format)
const
232 return m_parser.time2str(
structTm(), format);
254 return str(
"%Y/%m/%d");
265 return str(
"%H:%M:%S");
292 return tmpTm.tm_hour;
301 return tmpTm.tm_mday;
310 return tmpTm.tm_mon + DatetimeConstants::MONTH_OFFSET;
319 return tmpTm.tm_year + DatetimeConstants::TM_BASE_YEAR;
337 return tmpTm.tm_wday;
359 #if defined(_WIN32) || defined(_WIN64)
360 TIME_ZONE_INFORMATION tzi;
361 GetTimeZoneInformation(&tzi);
362 std::stringstream ss;
363 long bias = tzi.Bias;
370 ss <<
"(" << tzi.Bias <<
"min from UTC)";
374 return std::string(tmpTm.tm_zone);
387 return tmpTm.tm_isdst;
408 return Datetime(time_t(DatetimeConstants::MINIMUM_SEC),
isUTC);
430 tmpTm.tm_year + DatetimeConstants::TM_BASE_YEAR,
431 tmpTm.tm_mon + DatetimeConstants::MONTH_OFFSET,
442 void validateInput(
const time_t &time)
const
444 if (time < DatetimeConstants::MINIMUM_SEC)
446 std::stringstream ss;
447 ss <<
"Input time is out of range. minimum datetime is " <<
Datetime::minimum(m_isUTC).
str() << std::endl;
451 if (time > DatetimeConstants::MAXIMUM_SEC)
453 std::stringstream ss;
454 ss <<
"Input time is out of range. maximum datetime is " <<
Datetime::maximum(m_isUTC).
str() << std::endl;
455 throw DatetimeException(ss.str());
461 void validateInput(
const struct tm &
datetime)
const
463 time_t tmp = MyTM::my_mktime(
datetime, m_isUTC);
469 void setDateTime(
const std::string ×tamp,
const std::string &format)
471 struct tm tmpTm = m_parser.str2time(timestamp, format);
474 m_unixTime = MyTM::my_mktime(tmpTm, m_isUTC);
475 validateInput(m_unixTime);
479 std::stringstream ss;
481 <<
"\"" << timestamp <<
"\""
482 <<
" is in illegal time range." << std::endl;
483 throw DatetimeException(ss.str());
495 time_t unixTimeR = time_t(right);
496 time_t retSec = m_unixTime + unixTimeR;
508 Datetime operator-(
const long long &right)
const
512 Datetime operator-(
const TimeDelta &right)
const
519 m_isUTC = right_t.m_isUTC;
520 m_unixTime = right_t.m_unixTime;
529 time_t unixTimeR = time_t(right);
530 m_unixTime += unixTimeR;
542 Datetime &operator-=(
const long long &right)
546 Datetime &operator-=(
const TimeDelta &right)
552 std::ostream &operator<<(std::ostream &stream,
const Datetime &time)
554 stream << time.str();
562 TimeDelta operator-(
const Datetime &left,
const Datetime &right)
564 time_t diffSec = left.unixTime() - right.unixTime();
565 return TimeDelta(diffSec);
572 bool operator==(
const Datetime &left,
const Datetime &right)
574 auto diffSec = left - right;
578 bool operator!=(
const Datetime &left,
const Datetime &right)
580 return !(left == right);
583 bool operator<(
const Datetime &left,
const Datetime &right)
585 auto diffSec = left - right;
589 bool operator>(
const Datetime &left,
const Datetime &right)
591 auto diffSec = left - right;
595 bool operator<=(
const Datetime &left,
const Datetime &right)
597 return (left < right) || (left == right);
600 bool operator>=(
const Datetime &left,
const Datetime &right)
602 return (left > right) || (left == right);
Definition: datetime_exceptions.h:9
Datetime object.
Definition: datetime.h:59
Datetime(struct tm datetime, const bool &isUTC=false)
Definition: datetime.h:116
Datetime(const std::string ×tamp, const bool &isUTC=false)
Definition: datetime.h:100
std::string date() const
Definition: datetime.h:252
std::string str(const std::string &format) const
Definition: datetime.h:220
void setIsUTC(const bool &isUTC)
Definition: datetime.h:181
int isDst() const
Definition: datetime.h:384
int day() const
Definition: datetime.h:298
int daysOfWeek() const
Definition: datetime.h:334
int month() const
Definition: datetime.h:307
std::string datetime() const
Definition: datetime.h:241
std::string timesOfday() const
Definition: datetime.h:263
struct tm structTm() const
Definition: datetime.h:199
Datetime & operator+=(const TimeDelta &right)
Definition: datetime.h:537
long year() const
Definition: datetime.h:316
Datetime(const int &year, const int &mon, const int &day, const int &hour, const int &min, const int &sec, const bool &isUTC=false)
Definition: datetime.h:148
Datetime operator+(const TimeDelta &right) const
Definition: datetime.h:503
int sec() const
Definition: datetime.h:271
Datetime & operator+=(const long long &right)
Definition: datetime.h:527
int minute() const
Definition: datetime.h:280
Datetime(const std::string ×tamp, const std::string &format, const bool &isUTC=false)
Definition: datetime.h:71
std::vector< int > toVector() const
Definition: datetime.h:426
int hour() const
Definition: datetime.h:289
std::string timezone() const
Definition: datetime.h:356
bool isUTC() const
Definition: datetime.h:190
static Datetime now(const bool &isUTC=false)
Definition: datetime.h:396
Datetime(const time_t &unixTime=0, const bool &isUTC=false)
Definition: datetime.h:126
Datetime operator+(const long long &right) const
Definition: datetime.h:492
static Datetime minimum(const bool &isUTC=false)
Definition: datetime.h:406
static Datetime maximum(const bool &isUTC=false)
Definition: datetime.h:416
std::string str() const
Definition: datetime.h:210
std::string str(const char *format) const
Definition: datetime.h:230
long long unixTime() const
Definition: datetime.h:325
TimeDelta object.
Definition: time_delta.h:19
long long totalSeconds() const
Definition: time_delta.h:94