Это зависит от того, имеете ли вы в виду время с полуночи UT C или время с полуночи по местному времени, или, возможно, в каком-то нелокальном, далеком часовом поясе.
Это также значительно упрощается в C ++ 20. Но существует предварительный просмотр частей C ++ 20 библиотеки <chrono>
, которые можно использовать с C ++ 11-17.
Время с полуночи UT C
#include <chrono>
#include <iostream>
int
main()
{
using namespace std;
using namespace std::chrono;
auto now = system_clock::now();
auto today = floor<days>(now);
auto tod = duration_cast<seconds>(now - today);
}
Это просто получает текущее время (UT C), усекает его с точностью до дней time_point
, а затем вычитает два и усекает эту разницу с точностью до секунд.
Время с местной полуночи
#include <chrono>
#include <iostream>
int
main()
{
using namespace std;
using namespace std::chrono;
auto now = current_zone()->to_local(system_clock::now());
auto today = floor<days>(now);
auto tod = duration_cast<seconds>(now - today);
}
Эта версия находит текущий локальный часовой пояс вашего компьютера, а затем получает текущее местное время с помощью функции-члена time_zone to_local()
. И затем продолжается, как и раньше.
Время с другой полуночи
#include <chrono>
#include <iostream>
int
main()
{
using namespace std;
using namespace std::chrono;
auto now = locate_zone("Australia/Sydney")->to_local(system_clock::now());
auto today = floor<days>(now);
auto tod = duration_cast<seconds>(now - today);
}
Наконец, эта версия находит часовой пояс, связанный с Сиднеем, Австралия, а затем использует этот часовой пояс и продолжается, как и раньше.
Предварительный просмотр C ++ 20 <chrono>
library бесплатный и с открытым исходным кодом. Он помещает все в дату пространства имен и в два заголовка (и один источник):
date.h
: библиотека только для заголовка, которая будет выполнять часть UT C, но имеет нет поддержки часового пояса.
tz.h
: для поддержки часового пояса. Для этого требуется некоторая установка .