Skip to content

Commit

Permalink
1900 year DateTime correction (#599)
Browse files Browse the repository at this point in the history
Co-authored-by: Lukasz Arciszewski <lukasz.arciszewski@accenture.com>
  • Loading branch information
duszekmestre and Lukasz Arciszewski authored May 17, 2024
1 parent 4d1ee8e commit 49bc8e9
Showing 1 changed file with 25 additions and 3 deletions.
28 changes: 25 additions & 3 deletions src/MiniExcel/OpenXml/ExcelOpenXmlSheetWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -563,9 +563,20 @@ private Tuple<string, string, string> GetCellValue(int rowIndex, int cellIndex,
}
else if (columnInfo == null || columnInfo.ExcelFormat == null)
{
var oaDate = ((DateTime)value).ToOADate();

// Excel says 1900 was a leap year :( Replicate an incorrect behavior thanks
// to Lotus 1-2-3 decision from 1983...
// https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Extensions/DateTimeExtensions.cs#L45
const int nonExistent1900Feb29SerialDate = 60;
if (oaDate <= nonExistent1900Feb29SerialDate)
{
oaDate -= 1;
}

dataType = null;
styleIndex = "3";
cellValue = ((DateTime)value).ToOADate().ToString(CultureInfo.InvariantCulture);
cellValue = oaDate.ToString(CultureInfo.InvariantCulture);
}
else
{
Expand All @@ -585,9 +596,20 @@ private Tuple<string, string, string> GetCellValue(int rowIndex, int cellIndex,
else if (columnInfo == null || columnInfo.ExcelFormat == null)
{
var day = (DateOnly)value;
dataType = "n";
var oaDate = day.ToDateTime(TimeOnly.MinValue).ToOADate();

// Excel says 1900 was a leap year :( Replicate an incorrect behavior thanks
// to Lotus 1-2-3 decision from 1983...
// https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Extensions/DateTimeExtensions.cs#L45
const int nonExistent1900Feb29SerialDate = 60;
if (oaDate <= nonExistent1900Feb29SerialDate)
{
oaDate -= 1;
}

dataType = null;
styleIndex = "3";
cellValue = day.ToDateTime(TimeOnly.MinValue).ToOADate().ToString(CultureInfo.InvariantCulture);
cellValue = oaDate.ToString(CultureInfo.InvariantCulture);
}
else
{
Expand Down

0 comments on commit 49bc8e9

Please sign in to comment.