Как можно было бы реализовать FileTimeToSystemTime?

Я пишу простую обертку вокруг структуры Win32 FILETIME. boost::datetime имеет большую часть того, что я хочу, кроме мне нужен любой тип даты, который я заканчиваю тем, что использовал для интерполяции с Windows APIs без проблем.

С этой целью я решил записать свои собственные вещи для того, чтобы сделать это - большинство операций не все, что это усложнило. Я реализую TimeSpan - как тип в этой точке, но я не уверен, как я реализовал бы FileTimeToSystemTime. Я мог просто использовать встроенную функцию FileTimeToSystemTime системы, кроме FileTimeToSystemTime не может обработать отрицательные даты - я должен смочь представить что-то как "-12 секунд".

Как что-то вроде этого должно быть реализовано?

Billy3

5
задан Billy ONeal 16 June 2010 в 06:04
поделиться

3 ответа

Типы данных 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();
}
2
ответ дан 15 December 2019 в 06:16
поделиться

Предполагая, что у вас нет проблем со структурой, имеющей все беззнаковые компоненты, вы можете взять любые отрицательные временные интервалы, сделать их положительными, вызвать FileTimeToSystemTime, а затем (если исходный ввод был отрицательным) выбрать компоненты, чтобы сделать отрицательными.

1
ответ дан 15 December 2019 в 06:16
поделиться

Я вижу здесь плохой дизайн. Временной интервал, разница между двумя временами, одинакова при измерении системным временем и временем файла. W32 FileTimeToSystemTime прав в том, что не принимает отрицательные значения, потому что это не имеет смысла. Период в 2 секунды - это период в 2 секунды, независимо от того, какой часовой пояс вы использовали.

// РЕДАКТИРОВАТЬ: Вторая проблема. SYSTEMTIME каким-то образом может представлять промежуток времени, но это было бы ошибочно. Т.е. месяц не может использоваться при измерении промежутков времени.

0
ответ дан 15 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: