Я написал анализатор XML общего назначения, который может легко обрабатывать файлы GB. Он основан на XMLReader, и он очень прост в использовании:
$source = new XmlExtractor("path/to/tag", "/path/to/file.xml");
foreach ($source as $tag) {
echo $tag->field1;
echo $tag->field2->subfield1;
}
Вот github repo: XmlExtractor
Самый гибкий способ сделать это - преобразовать его в struct tm
, а затем использовать strftime
(это похоже на sprintf
для времени). Что-то вроде:
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(now);
std::tm now_tm = *std::localtime(&now_c);
/// now you can format the string as you like with `strftime`
Посмотрите документацию для strftime
здесь .
Если у вас есть localtime_s
или localtime_r
, вы должны используйте либо предпочтительнее localtime
.
Существует много других способов сделать это, но, в то время как в основном их проще использовать, они приводят к некоторому предопределенному строковому представлению. Вы можете просто «скрыть» все вышеперечисленное в функции для удобства использования.
Бесплатная, открытая версия с открытым исходным кодом Howard Hinnant, переносная библиотека даты / времени - это современный способ сделать это, не трафик через старый API C, и не требует, чтобы вы отбрасываете всю свою второстепенную информацию. Эта библиотека также предлагается для стандартизации .
В форматировании существует большая гибкость. Самый простой способ - просто выпустить:
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
std::cout << std::chrono::system_clock::now() << '\n';
}
Это просто для меня:
2017-09-15 13:11:34.356648
Требуется using namespace date;
, чтобы найти оператор потоковой передачи для system_clock::time_point
(для моей библиотеки не разрешено вставлять ее в namespace std::chrono
). Никакая информация не будет потеряна в этом формате: будет выведена полная точность вашего system_clock::time_point
(microseconds
, где я запустил это на macOS).
Полный набор strftime
флаги форматирования доступны для других форматов, с небольшими расширениями для обработки таких вещей, как дробные секунды. Вот еще один пример, который выводит с миллисекундной точностью:
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
std::cout << format("%D %T %Z\n", floor<milliseconds>(system_clock::now()));
}
, который только что выводит для меня:
09/15/17 13:17:40.466 UTC