]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/datetime.inl
Eliminate comma's after last element in an enum
[wxWidgets.git] / include / wx / datetime.inl
index 57555e63553df0994b2d37e52075709c39e95698..8be3bf69b28469012663c14ff9f1967a68d06b71 100644 (file)
     #error "This file is only included by wx/datetime.h, don't include it manually!"
 #endif
 
-// ----------------------------------------------------------------------------
-// wxDateTime statics
-// ----------------------------------------------------------------------------
-
-/* static */
-wxDateTime::Country wxDateTime::GetCountry()
-{
-    return ms_country;
-}
+#define MILLISECONDS_PER_DAY 86400000l
 
 // ----------------------------------------------------------------------------
 // wxDateTime construction
@@ -32,12 +24,12 @@ wxDateTime::Country wxDateTime::GetCountry()
 
 // only define this once, when included from datetime.cpp
 #ifdef wxDEFINE_TIME_CONSTANTS
-    const unsigned int wxDateTime::TIME_T_FACTOR = 1000;
+    const long wxDateTime::TIME_T_FACTOR = 1000l;
 #endif // wxDEFINE_TIME_CONSTANTS
 
 bool wxDateTime::IsInStdRange() const
 {
-    return m_time >= 0l && (m_time / (long)TIME_T_FACTOR) < LONG_MAX;
+    return m_time >= 0l && (m_time / TIME_T_FACTOR) < LONG_MAX;
 }
 
 /* static */
@@ -46,6 +38,12 @@ wxDateTime wxDateTime::Now()
     return wxDateTime(GetTimeNow());
 }
 
+/* static */
+wxDateTime wxDateTime::Today()
+{
+    return wxDateTime((time_t)(86400*(GetTimeNow() / 86400)));
+}
+
 wxDateTime& wxDateTime::Set(time_t timet)
 {
     // assign first to avoid long multiplication overflow!
@@ -75,6 +73,11 @@ wxDateTime::wxDateTime(const Tm& tm)
     Set(tm);
 }
 
+wxDateTime::wxDateTime(double jdn)
+{
+    Set(jdn);
+}
+
 wxDateTime& wxDateTime::Set(const Tm& tm)
 {
     wxASSERT_MSG( tm.IsValid(), _T("invalid broken down date/time") );
@@ -107,14 +110,14 @@ wxDateTime::wxDateTime(wxDateTime_t day,
 
 wxLongLong wxDateTime::GetValue() const
 {
-    wxASSERT_MSG( IsValid(), "invalid wxDateTime");
+    wxASSERT_MSG( IsValid(), _T("invalid wxDateTime"));
 
     return m_time;
 }
 
 time_t wxDateTime::GetTicks() const
 {
-    wxASSERT_MSG( IsValid(), "invalid wxDateTime");
+    wxASSERT_MSG( IsValid(), _T("invalid wxDateTime"));
     if ( !IsInStdRange() )
     {
         return (time_t)-1;
@@ -136,31 +139,21 @@ bool wxDateTime::SetToLastWeekDay(WeekDay weekday,
 
 bool wxDateTime::IsEqualTo(const wxDateTime& datetime) const
 {
-    wxASSERT_MSG( IsValid() && datetime.IsValid(), "invalid wxDateTime");
+    wxASSERT_MSG( IsValid() && datetime.IsValid(), _T("invalid wxDateTime"));
 
     return m_time == datetime.m_time;
 }
 
-bool wxDateTime::operator==(const wxDateTime& datetime) const
-{
-    return IsEqualTo(datetime);
-}
-
-bool wxDateTime::operator!=(const wxDateTime& datetime) const
-{
-    return !IsEqualTo(datetime);
-}
-
 bool wxDateTime::IsEarlierThan(const wxDateTime& datetime) const
 {
-    wxASSERT_MSG( IsValid() && datetime.IsValid(), "invalid wxDateTime");
+    wxASSERT_MSG( IsValid() && datetime.IsValid(), _T("invalid wxDateTime"));
 
     return m_time < datetime.m_time;
 }
 
 bool wxDateTime::IsLaterThan(const wxDateTime& datetime) const
 {
-    wxASSERT_MSG( IsValid() && datetime.IsValid(), "invalid wxDateTime");
+    wxASSERT_MSG( IsValid() && datetime.IsValid(), _T("invalid wxDateTime"));
 
     return m_time > datetime.m_time;
 }
@@ -178,13 +171,46 @@ bool wxDateTime::IsBetween(const wxDateTime& t1, const wxDateTime& t2) const
     return IsEqualTo(t1) || IsEqualTo(t2) || IsStrictlyBetween(t1, t2);
 }
 
+bool wxDateTime::IsSameDate(const wxDateTime& dt) const
+{
+    return (m_time - dt.m_time).Abs() < MILLISECONDS_PER_DAY;
+}
+
+bool wxDateTime::IsSameTime(const wxDateTime& dt) const
+{
+    // notice that we can't do something like this:
+    //
+    //    m_time % MILLISECONDS_PER_DAY == dt.m_time % MILLISECONDS_PER_DAY
+    //
+    // because we have also to deal with (possibly) different DST settings!
+    Tm tm1 = GetTm(),
+       tm2 = dt.GetTm();
+
+    return tm1.hour == tm2.hour &&
+           tm1.min == tm2.min &&
+           tm1.sec == tm2.sec &&
+           tm1.msec == tm2.msec;
+}
+
+bool wxDateTime::IsEqualUpTo(const wxDateTime& dt, const wxTimeSpan& ts) const
+{
+    return IsBetween(dt.Substract(ts), dt.Add(ts));
+}
+
 // ----------------------------------------------------------------------------
 // wxDateTime arithmetics
 // ----------------------------------------------------------------------------
 
+wxDateTime wxDateTime::Add(const wxTimeSpan& diff) const
+{
+    wxASSERT_MSG( IsValid(), _T("invalid wxDateTime"));
+
+    return wxDateTime(m_time + diff.GetValue());
+}
+
 wxDateTime& wxDateTime::Add(const wxTimeSpan& diff)
 {
-    wxASSERT_MSG( IsValid(), "invalid wxDateTime");
+    wxASSERT_MSG( IsValid(), _T("invalid wxDateTime"));
 
     m_time += diff.GetValue();
 
@@ -196,9 +222,16 @@ wxDateTime& wxDateTime::operator+=(const wxTimeSpan& diff)
     return Add(diff);
 }
 
+wxDateTime wxDateTime::Substract(const wxTimeSpan& diff) const
+{
+    wxASSERT_MSG( IsValid(), _T("invalid wxDateTime"));
+
+    return wxDateTime(m_time - diff.GetValue());
+}
+
 wxDateTime& wxDateTime::Substract(const wxTimeSpan& diff)
 {
-    wxASSERT_MSG( IsValid(), "invalid wxDateTime");
+    wxASSERT_MSG( IsValid(), _T("invalid wxDateTime"));
 
     m_time -= diff.GetValue();
 
@@ -212,14 +245,14 @@ wxDateTime& wxDateTime::operator-=(const wxTimeSpan& diff)
 
 wxTimeSpan wxDateTime::Substract(const wxDateTime& datetime) const
 {
-    wxASSERT_MSG( IsValid() && datetime.IsValid(), "invalid wxDateTime");
+    wxASSERT_MSG( IsValid() && datetime.IsValid(), _T("invalid wxDateTime"));
 
     return wxTimeSpan(datetime.GetValue() - GetValue());
 }
 
-wxTimeSpan wxDateTime::operator-(const wxDateTime& datetime) const
+wxDateTime wxDateTime::Add(const wxDateSpan& diff) const
 {
-    return Substract(datetime);
+    return wxDateTime(*this).Add(diff);
 }
 
 wxDateTime& wxDateTime::Substract(const wxDateSpan& diff)
@@ -227,6 +260,11 @@ wxDateTime& wxDateTime::Substract(const wxDateSpan& diff)
     return Add(diff.Negate());
 }
 
+wxDateTime wxDateTime::Substract(const wxDateSpan& diff) const
+{
+    return wxDateTime(*this).Substract(diff);
+}
+
 wxDateTime& wxDateTime::operator-=(const wxDateSpan& diff)
 {
     return Substract(diff);
@@ -241,37 +279,65 @@ wxDateTime& wxDateTime::operator+=(const wxDateSpan& diff)
 // wxDateTime and timezones
 // ----------------------------------------------------------------------------
 
-wxDateTime wxDateTime::ToUTC() const
-{
-    return wxDateTime(*this).MakeUTC();
-}
-
 wxDateTime wxDateTime::ToTimezone(const wxDateTime::TimeZone& tz) const
 {
     return wxDateTime(*this).MakeTimezone(tz);
 }
 
-wxDateTime wxDateTime::ToLocalTime(const wxDateTime::TimeZone& tz) const
-{
-    return wxDateTime(*this).MakeLocalTime(tz);
-}
-
 // ----------------------------------------------------------------------------
-// wxTimeSpan
+// wxTimeSpan construction
 // ----------------------------------------------------------------------------
 
 wxTimeSpan::wxTimeSpan(int hours, int minutes, int seconds, int milliseconds)
 {
     // assign first to avoid precision loss
-    m_diff = hours;
-    m_diff *= 60;
+    m_diff = (long)hours;
+    m_diff *= 60l;
     m_diff += minutes;
-    m_diff *= 60;
+    m_diff *= 60l;
     m_diff += seconds;
-    m_diff *= 1000;
+    m_diff *= 1000l;
     m_diff += milliseconds;
 }
 
+// ----------------------------------------------------------------------------
+// wxTimeSpan accessors
+// ----------------------------------------------------------------------------
+
+wxLongLong wxTimeSpan::GetSeconds() const
+{
+    return m_diff / 1000l;
+}
+
+int wxTimeSpan::GetMinutes() const
+{
+    return (GetSeconds() / 60l).GetLo();
+}
+
+int wxTimeSpan::GetHours() const
+{
+    return GetMinutes() / 60;
+}
+
+int wxTimeSpan::GetDays() const
+{
+    return GetHours() / 24;
+}
+
+int wxTimeSpan::GetWeeks() const
+{
+    return GetDays() / 7;
+}
+
+// ----------------------------------------------------------------------------
+// wxTimeSpan arithmetics
+// ----------------------------------------------------------------------------
+
+wxTimeSpan wxTimeSpan::Add(const wxTimeSpan& diff) const
+{
+    return wxTimeSpan(m_diff + diff.GetValue());
+}
+
 wxTimeSpan& wxTimeSpan::Add(const wxTimeSpan& diff)
 {
     m_diff += diff.GetValue();
@@ -279,6 +345,11 @@ wxTimeSpan& wxTimeSpan::Add(const wxTimeSpan& diff)
     return *this;
 }
 
+wxTimeSpan wxTimeSpan::Substract(const wxTimeSpan& diff) const
+{
+    return wxTimeSpan(m_diff - diff.GetValue());
+}
+
 wxTimeSpan& wxTimeSpan::Substract(const wxTimeSpan& diff)
 {
     m_diff -= diff.GetValue();
@@ -288,17 +359,14 @@ wxTimeSpan& wxTimeSpan::Substract(const wxTimeSpan& diff)
 
 wxTimeSpan& wxTimeSpan::Multiply(int n)
 {
-    m_diff *= n;
+    m_diff *= (long)n;
 
     return *this;
 }
 
-wxTimeSpan wxTimeSpan::operator*(int n) const
+wxTimeSpan wxTimeSpan::Multiply(int n) const
 {
-    wxTimeSpan result(*this);
-    result.Multiply(n);
-
-    return result;
+    return wxTimeSpan(m_diff * (long)n);
 }
 
 wxTimeSpan wxTimeSpan::Abs() const
@@ -331,7 +399,7 @@ wxDateSpan::operator+=(const wxDateSpan& other)
     return *this;
 }
 
-wxDateSpan& wxDateSpan::operator*=(int factor)
+wxDateSpan& wxDateSpan::Multiply(int factor)
 {
     m_years *= m_years;
     m_months *= m_months;
@@ -341,6 +409,11 @@ wxDateSpan& wxDateSpan::operator*=(int factor)
     return *this;
 }
 
+wxDateSpan wxDateSpan::Multiply(int factor) const
+{
+    return wxDateSpan(*this).Multiply(factor);
+}
+
 wxDateSpan wxDateSpan::Negate() const
 {
     return wxDateSpan(-m_years, -m_months, -m_weeks, -m_days);
@@ -356,3 +429,4 @@ wxDateSpan& wxDateSpan::Neg()
     return *this;
 }
 
+#undef MILLISECONDS_PER_DAY