summaryrefslogtreecommitdiffstats
path: root/xbmc/XBDateTime.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/XBDateTime.h')
-rw-r--r--xbmc/XBDateTime.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/xbmc/XBDateTime.h b/xbmc/XBDateTime.h
new file mode 100644
index 0000000..fb18e7c
--- /dev/null
+++ b/xbmc/XBDateTime.h
@@ -0,0 +1,213 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "utils/IArchivable.h"
+#include "utils/TimeFormat.h"
+#include "utils/XTimeUtils.h"
+
+#include <string>
+
+#include "PlatformDefs.h"
+
+class CDateTime;
+
+class CDateTimeSpan
+{
+public:
+ CDateTimeSpan();
+ CDateTimeSpan(const CDateTimeSpan& span);
+ CDateTimeSpan& operator=(const CDateTimeSpan&) = default;
+ CDateTimeSpan(int day, int hour, int minute, int second);
+
+ bool operator >(const CDateTimeSpan& right) const;
+ bool operator >=(const CDateTimeSpan& right) const;
+ bool operator <(const CDateTimeSpan& right) const;
+ bool operator <=(const CDateTimeSpan& right) const;
+ bool operator ==(const CDateTimeSpan& right) const;
+ bool operator !=(const CDateTimeSpan& right) const;
+
+ CDateTimeSpan operator +(const CDateTimeSpan& right) const;
+ CDateTimeSpan operator -(const CDateTimeSpan& right) const;
+
+ const CDateTimeSpan& operator +=(const CDateTimeSpan& right);
+ const CDateTimeSpan& operator -=(const CDateTimeSpan& right);
+
+ void SetDateTimeSpan(int day, int hour, int minute, int second);
+ void SetFromPeriod(const std::string &period);
+ void SetFromTimeString(const std::string& time);
+
+ int GetDays() const;
+ int GetHours() const;
+ int GetMinutes() const;
+ int GetSeconds() const;
+ int GetSecondsTotal() const;
+
+private:
+ void ToLargeInt(LARGE_INTEGER& time) const;
+ void FromLargeInt(const LARGE_INTEGER& time);
+
+private:
+ KODI::TIME::FileTime m_timeSpan;
+
+ friend class CDateTime;
+};
+
+/// \brief DateTime class, which uses FileTime as it's base.
+class CDateTime final : public IArchivable
+{
+public:
+ CDateTime();
+ CDateTime(const CDateTime& time);
+ CDateTime& operator=(const CDateTime&) = default;
+ explicit CDateTime(const KODI::TIME::SystemTime& time);
+ explicit CDateTime(const KODI::TIME::FileTime& time);
+ explicit CDateTime(const time_t& time);
+ explicit CDateTime(const tm& time);
+ CDateTime(int year, int month, int day, int hour, int minute, int second);
+
+ static CDateTime GetCurrentDateTime();
+ static CDateTime GetUTCDateTime();
+ static int MonthStringToMonthNum(const std::string& month);
+
+ static CDateTime FromDBDateTime(const std::string &dateTime);
+ static CDateTime FromDateString(const std::string &date);
+ static CDateTime FromDBDate(const std::string &date);
+ static CDateTime FromDBTime(const std::string &time);
+ static CDateTime FromW3CDate(const std::string &date);
+ static CDateTime FromW3CDateTime(const std::string &date, bool ignoreTimezone = false);
+ static CDateTime FromUTCDateTime(const CDateTime &dateTime);
+ static CDateTime FromUTCDateTime(const time_t &dateTime);
+ static CDateTime FromRFC1123DateTime(const std::string &dateTime);
+
+ const CDateTime& operator=(const KODI::TIME::SystemTime& right);
+ const CDateTime& operator=(const KODI::TIME::FileTime& right);
+ const CDateTime& operator =(const time_t& right);
+ const CDateTime& operator =(const tm& right);
+
+ bool operator >(const CDateTime& right) const;
+ bool operator >=(const CDateTime& right) const;
+ bool operator <(const CDateTime& right) const;
+ bool operator <=(const CDateTime& right) const;
+ bool operator ==(const CDateTime& right) const;
+ bool operator !=(const CDateTime& right) const;
+
+ bool operator>(const KODI::TIME::FileTime& right) const;
+ bool operator>=(const KODI::TIME::FileTime& right) const;
+ bool operator<(const KODI::TIME::FileTime& right) const;
+ bool operator<=(const KODI::TIME::FileTime& right) const;
+ bool operator==(const KODI::TIME::FileTime& right) const;
+ bool operator!=(const KODI::TIME::FileTime& right) const;
+
+ bool operator>(const KODI::TIME::SystemTime& right) const;
+ bool operator>=(const KODI::TIME::SystemTime& right) const;
+ bool operator<(const KODI::TIME::SystemTime& right) const;
+ bool operator<=(const KODI::TIME::SystemTime& right) const;
+ bool operator==(const KODI::TIME::SystemTime& right) const;
+ bool operator!=(const KODI::TIME::SystemTime& right) const;
+
+ bool operator >(const time_t& right) const;
+ bool operator >=(const time_t& right) const;
+ bool operator <(const time_t& right) const;
+ bool operator <=(const time_t& right) const;
+ bool operator ==(const time_t& right) const;
+ bool operator !=(const time_t& right) const;
+
+ bool operator >(const tm& right) const;
+ bool operator >=(const tm& right) const;
+ bool operator <(const tm& right) const;
+ bool operator <=(const tm& right) const;
+ bool operator ==(const tm& right) const;
+ bool operator !=(const tm& right) const;
+
+ CDateTime operator +(const CDateTimeSpan& right) const;
+ CDateTime operator -(const CDateTimeSpan& right) const;
+
+ const CDateTime& operator +=(const CDateTimeSpan& right);
+ const CDateTime& operator -=(const CDateTimeSpan& right);
+
+ CDateTimeSpan operator -(const CDateTime& right) const;
+
+ operator KODI::TIME::FileTime() const;
+
+ void Archive(CArchive& ar) override;
+
+ void Reset();
+
+ int GetDay() const;
+ int GetMonth() const;
+ int GetYear() const;
+ int GetHour() const;
+ int GetMinute() const;
+ int GetSecond() const;
+ int GetDayOfWeek() const;
+ int GetMinuteOfDay() const;
+
+ bool SetDateTime(int year, int month, int day, int hour, int minute, int second);
+ bool SetDate(int year, int month, int day);
+ bool SetTime(int hour, int minute, int second);
+
+ bool SetFromDateString(const std::string &date);
+ bool SetFromDBDate(const std::string &date);
+ bool SetFromDBTime(const std::string &time);
+ bool SetFromW3CDate(const std::string &date);
+ bool SetFromW3CDateTime(const std::string &date, bool ignoreTimezone = false);
+ bool SetFromUTCDateTime(const CDateTime &dateTime);
+ bool SetFromUTCDateTime(const time_t &dateTime);
+ bool SetFromRFC1123DateTime(const std::string &dateTime);
+
+ /*! \brief set from a database datetime format YYYY-MM-DD HH:MM:SS
+ \sa GetAsDBDateTime()
+ */
+ bool SetFromDBDateTime(const std::string &dateTime);
+
+ void GetAsSystemTime(KODI::TIME::SystemTime& time) const;
+ void GetAsTime(time_t& time) const;
+ void GetAsTm(tm& time) const;
+ void GetAsTimeStamp(KODI::TIME::FileTime& time) const;
+
+ CDateTime GetAsUTCDateTime() const;
+ std::string GetAsSaveString() const;
+ std::string GetAsDBDateTime() const;
+ std::string GetAsDBDate() const;
+ std::string GetAsDBTime() const;
+ std::string GetAsLocalizedDate(bool longDate=false) const;
+ std::string GetAsLocalizedDate(const std::string &strFormat) const;
+ std::string GetAsLocalizedTime(const std::string &format, bool withSeconds=true) const;
+ std::string GetAsLocalizedDateTime(bool longDate=false, bool withSeconds=true) const;
+ std::string GetAsLocalizedTime(TIME_FORMAT format, bool withSeconds = false) const;
+ std::string GetAsRFC1123DateTime() const;
+ std::string GetAsW3CDate() const;
+ std::string GetAsW3CDateTime(bool asUtc = false) const;
+
+ void SetValid(bool yesNo);
+ bool IsValid() const;
+
+ static void ResetTimezoneBias(void);
+ static CDateTimeSpan GetTimezoneBias(void);
+
+private:
+ bool ToFileTime(const KODI::TIME::SystemTime& time, KODI::TIME::FileTime& fileTime) const;
+ bool ToFileTime(const time_t& time, KODI::TIME::FileTime& fileTime) const;
+ bool ToFileTime(const tm& time, KODI::TIME::FileTime& fileTime) const;
+
+ void ToLargeInt(LARGE_INTEGER& time) const;
+ void FromLargeInt(const LARGE_INTEGER& time);
+
+private:
+ KODI::TIME::FileTime m_time;
+
+ typedef enum _STATE
+ {
+ invalid=0,
+ valid
+ } STATE;
+
+ STATE m_state;
+};