C ++ Получить системное время как количество секунд в день

Я пишу программу для отметки времени на изображениях, снятых камерой. Для этого я использую системное время Windows 7. я использовал GetSystemTimeAsFileTime() в коде ниже:

FILETIME ft;
GetSystemTimeAsFileTime(&ft);
long long ll_now = (LONGLONG)ft.dwLowDateTime + ((LONGLONG)(ft.dwHighDateTime) << 32LL);

То, что я хочу сделать, это получить количество секунд, прошедших за день (0–86400) с разрешением в миллисекунды, чтобы оно было примерно 12345,678. Это правильный способ сделать это? Если это так, как я могу преобразовать это целое число, чтобы получить количество секунд, пропущенных в текущем дне? Я буду отображать время в строке и использовать fstream положить время в текстовом файле.

Спасибо

-1

Решение

Я не знаю Window API но C++ стандартные библиотеки (начиная с C ++ 11) можно использовать так:

#include <ctime>
#include <chrono>
#include <string>
#include <sstream>
#include <iomanip>

std::string stamp_secs_dot_ms()
{
using namespace std::chrono;

auto now = system_clock::now();

// tt stores time in seconds since epoch
std::time_t tt = system_clock::to_time_t(now);

// broken time as of now
std::tm bt = *std::localtime(&tt);

// alter broken time to the beginning of today
bt.tm_hour = 0;
bt.tm_min = 0;
bt.tm_sec = 0;

// convert broken time back into std::time_t
tt = std::mktime(&bt);

// start of today in system_clock units
auto start_of_today = system_clock::from_time_t(tt);

// today's duration in system clock units
auto length_of_today = now - start_of_today;

// seconds since start of today
seconds secs = duration_cast<seconds>(length_of_today); // whole seconds

// milliseconds since start of today
milliseconds ms = duration_cast<milliseconds>(length_of_today);

// subtract the number of seconds from the number of milliseconds
// to get the current millisecond
ms -= secs;

// build output string
std::ostringstream oss;
oss.fill('0');

oss << std::setw(5) << secs.count();
oss << '.' << std::setw(3) << ms.count();

return oss.str();
}

int main()
{
std::cout << stamp_secs_dot_ms() << '\n';
}

Пример вывода:

13641.509
0

Другие решения


По вопросам рекламы [email protected]