Browse Source

Fix Issue #36 Date Time / Daylight Saving Time

master
Debao Zhang 11 years ago
parent
commit
e10976ab90
  1. 18
      src/xlsx/xlsxutility.cpp

18
src/xlsx/xlsxutility.cpp

@ -72,10 +72,17 @@ double datetimeToNumber(const QDateTime &dt, bool is1904)
QDateTime epoch(is1904 ? QDate(1904, 1, 1): QDate(1899, 12, 31), QTime(0,0)); QDateTime epoch(is1904 ? QDate(1904, 1, 1): QDate(1899, 12, 31), QTime(0,0));
double excel_time = epoch.msecsTo(dt) / (1000*60*60*24.0); double excel_time = epoch.msecsTo(dt) / (1000*60*60*24.0);
#if QT_VERSION >= 0x050200
if (dt.isDaylightTime()) // Add one hour if the date is Daylight
excel_time += 1.0 / 24.0;
#endif
if (!is1904 && excel_time > 59) {//31+28 if (!is1904 && excel_time > 59) {//31+28
//Account for Excel erroneously treating 1900 as a leap year. //Account for Excel erroneously treating 1900 as a leap year.
excel_time += 1; excel_time += 1;
} }
return excel_time; return excel_time;
} }
@ -92,7 +99,16 @@ QDateTime datetimeFromNumber(double num, bool is1904)
qint64 msecs = static_cast<qint64>(num * 1000*60*60*24.0 + 0.5); qint64 msecs = static_cast<qint64>(num * 1000*60*60*24.0 + 0.5);
QDateTime epoch(is1904 ? QDate(1904, 1, 1): QDate(1899, 12, 31), QTime(0,0)); QDateTime epoch(is1904 ? QDate(1904, 1, 1): QDate(1899, 12, 31), QTime(0,0));
return epoch.addMSecs(msecs); QDateTime dt = epoch.addMSecs(msecs);
#if QT_VERSION >= 0x050200
// Remove one hour to see whether the date is Daylight
QDateTime dt2 = dt.addMSecs(-3600);
if (dt2.isDaylightTime())
return dt2;
#endif
return dt;
} }
/* /*

Loading…
Cancel
Save