Excel日期在一个似乎被称为OADate
的约定中存储为double,是否有内置函数将OADate
转换为struct tm
。
例如,在Excel中,9/May/2014
为41768
。我需要在C ++中找到一种方法,将41768
初始化的struct tm
转换为正确的日期。
是否有内置功能来执行此操作?我可以使用VariantTimeToSystemTime()
,但会将其转换为LPSYSTEMTIME
,然后需要将其转换为struct tm
。我正在寻找能同时做到这两件事的事情。这不是很难,但我宁愿使用内置函数而不是编写自己的函数。
答案 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);