Skip to content

Commit

Permalink
1900 year DateTime correction
Browse files Browse the repository at this point in the history
  • Loading branch information
duszekmestre authored and Lukasz Arciszewski committed May 17, 2024
1 parent ae4e68f commit 1703f4d
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 1703f4d

Please sign in to comment.