Звучит так, как будто вы читаете форматированное значение отображения, а не значение базовой ячейки. Возможно, это поможет вам. Я не уверен, что Excel сохраняет дату и время как двойное число дней с 1900-01-01, а десятичная часть определяет, как он определяет часы в дне. Это число также может быть отрицательным или положительным, поэтому в прошлом я пытался получить правильное значение, чтобы прочитать значение ячейки и преобразовать его в DateTime.
//get the underlying value instead of the display value
var cellValue = worksheet.Cells["" + firstRowCell.Address + ":" +
Regex.Replace(firstRowCell.Address, "[0-9]", "") + "" +
worksheet.Dimension.Rows].Value;
var stringValue = $"{cellValue}";
//Now convert the double to a valid DateTime;
DateTime value;
var date = new DateTime(1899, 12, 30);
double doubleValue;
if (double.TryParse(stringValue, out doubleValue) &&
(doubleValue <= 2958465) &&
(doubleValue >= -693593))
value = date.AddDays(doubleValue);
Если у вас есть действительное значение DateTime, вы можете использовать ToString для получения правильного 12-часового формата
value.ToString("dd/mm/yyyy hh:mm:ss tt")