【发布时间】:2011-01-03 17:42:14
【问题描述】:
我从 C# (DateTime.ToOADate(),它是一个 OLE 日期时间) 获得一个日期/时间作为双精度值。它包含从 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。
谢谢, 马库斯
【问题讨论】:
-
Visual C++ 6.0 的编译器甚至不是 C++。它以可怕的方式违反了标准。在编程时请注意这一点,如果可以,请尝试升级。另外,不能使用MFC其实是幸运,而不是不幸。 :) 尽可能使用标准 C++ + Boost。