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;
wxDateTime& wxDateTime::SetFromDOS(unsigned long ddt)
{
struct tm tm;
+ InitTm(tm);
long year = ddt & 0xFE000000;
year >>= 25;
// for Dec, we can't compare with gs_cumulatedDays[mon + 1], but we
// don't need it neither - because of the CHECK above we know that
// yday lies in December then
- if ( (mon == Dec) || (yday < gs_cumulatedDays[isLeap][mon + 1]) )
+ if ( (mon == Dec) || (yday <= gs_cumulatedDays[isLeap][mon + 1]) )
{
Set(yday - gs_cumulatedDays[isLeap][mon], mon, year);
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);