如何实现FileTimeToSystemTime?

Bil*_*eal 5 c++ datetime

我正在围绕Win32 FILETIME结构编写一个简单的包装器.boost::datetime有我想要的大部分内容,除了我需要的任何日期类型,我最终使用Windows API插入没有问题.

为此,我决定为此做自己的事情 - 大多数操作都不是那么复杂.我现在正在实现类似TimeSpan的类型,但我不确定如何实现FileTimeToSystemTime.我可以使用系统的内置FileTimeToSystemTime函数,但FileTimeToSystemTime无法处理负日期 - 我需要能够表示类似"-12秒"的内容.

应该如何实施这样的事情?

Billy3

Mic*_*l J 2

Windows SYSTEMTIME 和 FILETIME 数据类型旨在表示特定的日期和时间。它们不太适合代表时间差异。时间差最好作为表示两个 SYSTEMTIME 或 FILETIME 之间数量的简单整数。可能是秒,或者如果您需要更精确的话更小的值。

如果需要向用户显示差异,可以使用简单的除法和模数来计算分量。

std::string PrintTimeDiff(int nSecDiff)
{
    std::ostringstream os;

    if (nSecDiff<0)
    {
        os << "-";
        nSecDiff= -nSecDiff;
    }
    int nSeconds = nSecDiff % (24*60*60);
    nSecDiff /= 60;
    int nMinutes = nSecDiff % (24*60)
    nSecDiff /= 60;
    int nHours = nSecDiff % 24;
    int nDays = nSecDiff / 24;

    os << nDays << " Days " << nHours << ":" << nMinutes << ":" << nSeconds;
    return os .str();
}
Run Code Online (Sandbox Code Playgroud)