Новый ответ на старый вопрос с использованием C ++ 11 или C ++ 14 и этой бесплатной библиотеки с открытым исходным кодом :
#include "tz.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std;
using namespace std::chrono;
auto now = make_zoned(current_zone(), floor<milliseconds>(system_clock::now()));
cout << format("%e/%m/%Y %T", now) << '\n';
}
Это просто вывод для меня:
16/01/2017 15:34:32.167
, которая является моей текущей локальной датой и временем с точностью до миллисекунды. Исключив floor<milliseconds>()
, вы автоматически получите ту точность, которую имеет system_clock
.
Если вы хотите получить результат в виде временной метки UTC вместо локальной временной метки, это еще проще:
auto now = floor<milliseconds>(system_clock::now());
cout << format("%e/%m/%Y %T", now) << '\n';
И если вам нужна метка времени UTC, и вы не требовательны к точности или формату, вы можете просто:
cout << system_clock::now() << '\n';
который просто выводит для меня:
2017-01-16 20:42:11.267245