我从 C#(DateTime.ToOADate(),它是一个 OLE 日期时间)获取一个 double 值的日期/时间。它包含从 1899 年 12 月 31 日起过去的天数,分数是一天中过去的部分。乘以 86400 我得到秒数,最后得到一天的时间。
然而获取日期更难。除了 UNIX 时间涵盖的日期(1970/01/01 到 2038/01/19)之外,我仍然没有解决方案。在此期间,可以使用 mktime() 将经过的天数转换为日期时间。
double OleDateTimeValue = 28170.654351851852; // 14.02.1977 15:42:16
struct tm * timeinfo;
int passedDays = (int)OLEDateTimeValue;
// between 1.1.1970 and 18.1.2038
if((passedDays >= 25569) && (passedDays <= 50423))
{
timeinfo->tm_year = 70; //1970
timeinfo->tm_mon = 0;
timeinfo->tm_mday = 1 + (passedDays - 25569);
mktime(timeinfo);
}
else // date outside the UNIX date/time
{
}
现在,mktime() 格式化 tm 结构,使其代表请求的日期,或者如果值在给定日期之外则返回 -1。
是否有通用的计算方法?不幸的是,我不能使用 MFC,必须使用 Visual C++ 6.0。
谢谢, 马库斯
最佳答案
我相信你可以使用 VariantTimeToSystemTime函数转换为 SYSTEMTIME。
关于c++ - 在 C++ 中将日期/时间(作为 Double)转换为 struct* tm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4586812/