NPOI DateCell отстает на 1 секунду от времени в Excel - PullRequest
1 голос
/ 30 января 2020

У меня есть документ Excel со временем, указанным как «02:30» ... однако, при итерации по ним с использованием NPOI, DateCellValue переключается на «02:29:59» ... Это сначала происходит 1/1 / 2019 (который корректно хранится как «02:30»), но затем на 1/2/2019 он переходит на «02:29:59» ... Кто-нибудь знает, как заставить его просто получить значение ячейки, не пытаясь сделать вуду с этим? Это очевидно, принимая во внимание, возможно, високосную секунду или что-то? Это, однако, ясно, как день в Excel как "02:30", а на моей точке останова с:

[Model].DepartureDttm = row.GetCell(j).DateCellValue [1/2/2019 2:29:59 AM]

1 Ответ

1 голос
/ 30 января 2020

Вы не единственный, кто столкнулся с этой проблемой. Вот хороший ответ .

Вы можете использовать DateUtil.GetJavaDate с NPOI для решения этой проблемы. Вы можете создать этот базовый c метод расширения:

public static class Extensions
{
    public static DateTime DateCellValueRounded(this ICell cell)
    {
        return DateUtil.GetJavaDate(cell.NumericCellValue, false, TimeZone.CurrentTimeZone, true);
    }
}

Затем используйте его следующим образом:

DateTime date = row.GetCell(index).DateCellValueRounded;

GetJavaDate подпись (последний параметр установлен на true делает работу):

public static DateTime GetJavaDate(double date, bool use1904windowing, TimeZone tz, bool roundSeconds);
...