Конвертировать формат DateTime в epplus - PullRequest
0 голосов
/ 31 мая 2019

Я хочу прочитать столбец из Excel в datatable, используя epplus, но всякий раз, когда я делаю это, я получаю время в 24-часовом формате. Я хочу, чтобы время было в 12-часовом формате, как в Excel.

Я попытался изменить формат даты в Excel на "дд / мм / гггг чч: мм: сс тт", это дает мне AM / PM, но показывает время в 24-часовом формате.

worksheet.Cells["" + firstRowCell.Address + ":" + 
Regex.Replace(firstRowCell.Address, "[0-9]", "") + "" + 
worksheet.Dimension.Rows].Style.Numberformat.Format =  "dd/mm/yyyy hh:mm:ss tt";

1 Ответ

1 голос
/ 31 мая 2019

Звучит так, как будто вы читаете форматированное значение отображения, а не значение базовой ячейки. Возможно, это поможет вам. Я не уверен, что 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...