X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77ffb5937e89927b621128789401db8921fe580f..c7382f913cc2d3ddcc782b876574c58865e7d842:/src/common/datetime.cpp diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index b1668f0d27..3ac780395f 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -13,7 +13,7 @@ // so long as the above copyright and this permission statement // are retained in all copies. // -// Licence: wxWidgets licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// /* @@ -817,10 +817,12 @@ wxString wxDateTime::GetWeekDayName(wxDateTime::WeekDay wday, { wxCHECK_MSG( wday != Inv_WeekDay, _T(""), _T("invalid weekday") ); - // take some arbitrary Sunday + // take some arbitrary Sunday (but notice that the day should be such that + // after adding wday to it below we still have a valid date, e.g. don't + // take 28 here!) tm tm; InitTm(tm); - tm.tm_mday = 28; + tm.tm_mday = 21; tm.tm_mon = Nov; tm.tm_year = 99; @@ -1287,6 +1289,17 @@ wxDateTime& wxDateTime::Set(double jdn) jdn *= MILLISECONDS_PER_DAY; + // JDNs always suppose an UTC date, so bring it back to local time zone + // (also see GetJulianDayNumber() implementation) + long tzDiff = GetTimeZone(); + if ( IsDST() == 1 ) + { + // FIXME: again, we suppose that DST is always one hour + tzDiff -= 3600; + } + + jdn += tzDiff*1000; // tzDiff is in seconds + m_time.Assign(jdn); return *this; @@ -1904,8 +1917,8 @@ wxDateTime& wxDateTime::SetToYearDay(wxDateTime::wxDateTime_t yday) double wxDateTime::GetJulianDayNumber() const { - // JDN are always expressed for the GMT dates - Tm tm(ToTimezone(GMT0).GetTm(GMT0)); + // JDN are always expressed for the UTC dates + Tm tm(ToTimezone(UTC).GetTm(UTC)); double result = GetTruncatedJDN(tm.mday, tm.mon, tm.year);