Тип для хранения времени в С++

187
02 января 2019, 01:40

У меня стоит задача написать функцию, которая получает от GPS и возвращает текущее время. В какой структуре или объекте, какого класса из стандартной библиотеки мне хранить это время? Мне нужно, что бы была возможность легко задавать и получать значения секунд, минут, часов и т.п. Т.е. что то типа

time_point time_now = now();
int hour = time_now.hour();
int second = time_now.second();
time_now.second = 0; 

Сейчас у меня много где в коде используется std::chrono::time_point, но как, имея конкретный объект получить, например количество часов прошедших от начала суток я не знаю.

Answer 1

Можете воспользоваться стандартной библиотекой C для работы с датой и временем:

std::time_t t = time(nullptr);
std::cout << localtime(&t)->tm_hour;

В C++20 в библиотеку chrono добавляются функции для работы с датой, временем, временными зонами, новые классы часов и т.д. подробнее на cppreference

Сейчас Вы можете, например, сконвертировать time_point в std::time_t и также использовать функции из стандартной библиотеки C:

using sc = std::chrono::system_clock;
std::time_t t = sc::to_time_t(sc::now());
std::cout << localtime(&t)->tm_hour;

В Boost имеется библиотека Date_Time

В Qt также имеется класс для работы со временем - QDateTime.

Answer 2

Вам принципиальны "++"? Если нет, то gettimeofday(), localtime(), mktime() и работы со struct timeval может быть достаточно.

READ ALSO
Массив со стринговым индификатором(c++)

Массив со стринговым индификатором(c++)

возник вопрос, можно ли создать массив или его альтернативу, по типу списка, чтобы как индификатор выступало стринговое значението есть примерно...

222
C++ регулярное выражение

C++ регулярное выражение

Подскажите, почему код:

170
Программа русификатор (поиск)

Программа русификатор (поиск)

Подскажите программу с помощью которой можно русифицировать файлы (dll и

165
Статическая сборка QT 5.11.1

Статическая сборка QT 5.11.1

уже все примеры перепробовал, ну никак не получается, у меня есть QT 511

162