c++ - 在 C++ 中将日期/时间(作为 Double)转换为 struct* tm

标签 c++ datetime

我从 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/

相关文章:

excel - 倒计时到 VBA 中的特定日期和时间

php - 样式化日期时间 symfony/bootstrap

python - Pandas 数据框分组日期时间月

c++ - 方法声明问题

c++ - std::vector 预分配(大小和容量 n + 2)

javascript - 如何检查两个日期之间的天数是否是工作日?

MYSQL 搜索以前的日期时间,对内容进行空检查

C++20 #import ""- 语句 : Will it be possible to use multiple preprocessed header files

c++ - 从一组套接字中检测超时套接字

c++ - c++ 和 cublas 代码的混合未编译