C ++,将OADa​​te转换为struct tm

时间:2014-05-09 11:54:12

标签: c++ winapi datetime

Excel日期在一个似乎被称为OADate的约定中存储为double,是否有内置函数将OADate转换为struct tm

例如,在Excel中,9/May/201441768。我需要在C ++中找到一种方法,将41768初始化的struct tm转换为正确的日期。

是否有内置功能来执行此操作?我可以使用VariantTimeToSystemTime(),但会将其转换为LPSYSTEMTIME,然后需要将其转换为struct tm。我正在寻找能同时做到这两件事的事情。这不是很难,但我宁愿使用内置函数而不是编写自己的函数。

1 个答案:

答案 0 :(得分:1)

如果有人需要这样做,这足以让它发挥作用:

    double oaDate = 41678.;
    char buffer[256];
    struct tm timeinfo;
    _SYSTEMTIME lpSystemTime;
    VariantTimeToSystemTime(oaDate, &lpSystemTime);
    timeinfo.tm_mday = lpSystemTime.wDay;
    timeinfo.tm_mon = lpSystemTime.wMonth - 1;      // Be careful of different conventions
    timeinfo.tm_year = lpSystemTime.wYear - 1900;
    timeinfo.tm_hour = lpSystemTime.wHour;
    timeinfo.tm_min = lpSystemTime.wMinute;
    timeinfo.tm_sec = lpSystemTime.wSecond;
    timeinfo.tm_isdst = 0;
    mktime(&timeinfo);