Excel日期以double形式存储,似乎被称为OADate
,是否有内置函数将OADate
转换为struct tm
。
例如,在Excel中,9/May/2014
为41768
。我需要在c++中找到一种方法来转换41768
在struct tm
初始化为正确的日期。
是否有内置函数来做到这一点?我可以使用VariantTimeToSystemTime()
,但它将其转换为LPSYSTEMTIME
,然后需要转换为struct tm
。我在寻找一种能同时做到这两点的东西。这不是很难做到,但我宁愿使用内置函数,而不是自己编写。
如果有人需要这样做,这足以使它工作:
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);