Как вычислить временную метку из Win32 GetSystemTimeAsFileTime()

В этой статье блога мы рассмотрим различные методы вычисления отметки времени с помощью функции Win32 GetSystemTimeAsFileTime(). Мы предоставим примеры кода для каждого метода, чтобы помочь вам реализовать их в ваших проектах. К концу этой статьи вы будете иметь четкое представление о том, как получать временные метки с помощью этой функции Win32.

Метод 1: использование структуры FILETIME и функций преобразования

#include <Windows.h>
#include <iostream>
#include <iomanip>
#include <sstream>
std::string GetTimestampFromWin32FileTime()
{
    FILETIME fileTime;
    GetSystemTimeAsFileTime(&fileTime);
    ULARGE_INTEGER uli;
    uli.LowPart = fileTime.dwLowDateTime;
    uli.HighPart = fileTime.dwHighDateTime;
    ULONGLONG timestamp = uli.QuadPart / 10000ULL - 11644473600000ULL;
    std::stringstream ss;
    ss << std::setw(20) << std::setfill('0') << timestamp;
    return ss.str();
}
int main()
{
    std::string timestamp = GetTimestampFromWin32FileTime();
    std::cout << "Timestamp: " << timestamp << std::endl;
    return 0;
}

Метод 2. Использование структуры SYSTEMTIME и функций преобразования

#include <Windows.h>
#include <iostream>
#include <iomanip>
#include <sstream>
std::string GetTimestampFromWin32SystemTime()
{
    SYSTEMTIME systemTime;
    GetSystemTime(&systemTime);
    FILETIME fileTime;
    SystemTimeToFileTime(&systemTime, &fileTime);
    ULARGE_INTEGER uli;
    uli.LowPart = fileTime.dwLowDateTime;
    uli.HighPart = fileTime.dwHighDateTime;
    ULONGLONG timestamp = uli.QuadPart / 10000ULL - 11644473600000ULL;
    std::stringstream ss;
    ss << std::setw(20) << std::setfill('0') << timestamp;
    return ss.str();
}
int main()
{
    std::string timestamp = GetTimestampFromWin32SystemTime();
    std::cout << "Timestamp: " << timestamp << std::endl;
    return 0;
}

Метод 3. Использование функций времени и функций преобразования

#include <Windows.h>
#include <iostream>
#include <iomanip>
#include <sstream>
std::string GetTimestampFromWin32Time()
{
    time_t currentTime = time(NULL);
    FILETIME fileTime;
    SystemTimeToFileTime((SYSTEMTIME*)&currentTime, &fileTime);
    ULARGE_INTEGER uli;
    uli.LowPart = fileTime.dwLowDateTime;
    uli.HighPart = fileTime.dwHighDateTime;
    ULONGLONG timestamp = uli.QuadPart / 10000ULL - 11644473600000ULL;
    std::stringstream ss;
    ss << std::setw(20) << std::setfill('0') << timestamp;
    return ss.str();
}
int main()
{
    std::string timestamp = GetTimestampFromWin32Time();
    std::cout << "Timestamp: " << timestamp << std::endl;
    return 0;
}

В этой статье мы рассмотрели три метода вычисления отметки времени с помощью функции Win32 GetSystemTimeAsFileTime(). Эти методы включают использование структуры FILETIME, структуры SYSTEMTIME и функций времени. Каждый метод предоставляет пример кода, демонстрирующий, как получить метку времени из функции Win32. Реализуя эти методы, вы можете легко получать временные метки в своих приложениях и проектах.