Standard format changes

This commit is contained in:
Eivind Samseth
2025-08-15 21:44:44 +02:00
committed by mvglasow
parent 90d7cadc3f
commit 01476d3dc7
2 changed files with 33 additions and 10 deletions

View File

@@ -2,6 +2,7 @@
#include "base/logging.hpp"
#include <iomanip>
#include <regex>
using namespace std;
@@ -174,7 +175,14 @@ void IsoTime::Shift(IsoTime nowRef)
std::string IsoTime::ToString() const
{
return std::format("{0:%F}T{0:%T}{0:%Ez}", time_point_cast<std::chrono::seconds>(m_tp));
auto const tp_seconds = time_point_cast<std::chrono::seconds>(m_tp);
auto const time_t = std::chrono::system_clock::to_time_t(tp_seconds);
std::tm tm = *std::gmtime(&time_t);
std::ostringstream ss;
ss << std::put_time(&tm, "%Y-%m-%dT%H:%M:%S");
ss << "Z";
return ss.str();
}
bool IsoTime::operator< (IsoTime & rhs)
@@ -346,7 +354,9 @@ std::string DebugPrint(IsoTime time)
std::ostringstream os;
//os << std::put_time(&time.m_tm, "%Y-%m-%d %H:%M:%S %z");
// %FT%T%z
os << std::format("{0:%F} {0:%T} {0:%z}", time.m_tp);
auto const time_t = std::chrono::system_clock::to_time_t(time.m_tp);
std::tm tm = *std::gmtime(&time_t);
os << std::put_time(&tm, "%Y-%m-%d %H:%M:%S UTC");
return os.str();
}
@@ -542,7 +552,9 @@ std::string DebugPrint(TraffEvent event)
os << "probability: " << (event.m_probability ? std::to_string(event.m_probability.value()) : "nullopt") << ", ";
os << "q_duration: "
<< (event.m_qDurationMins
? std::format("{:1d}:{:02d}", event.m_qDurationMins.value() / 60, event.m_qDurationMins.value() % 60)
? (std::to_string(event.m_qDurationMins.value() / 60) + ":" +
(event.m_qDurationMins.value() % 60 < 10 ? "0" : "") +
std::to_string(event.m_qDurationMins.value() % 60))
: "nullopt")
<< ", ";
// TODO other quantifiers

View File

@@ -4,6 +4,7 @@
#include "base/logging.hpp"
#include <cstring>
#include <iomanip>
#include <optional>
#include <regex>
#include <type_traits>
@@ -557,7 +558,10 @@ void PointToXml(Point const & point, std::string name, pugi::xml_node & parentNo
if (point.m_junctionRef)
node.append_attribute("junction_ref").set_value(point.m_junctionRef.value());
node.text() = std::format("{0:+.5f} {1:+.5f}", point.m_coordinates.m_lat, point.m_coordinates.m_lon);
std::ostringstream coord_ss;
coord_ss << std::fixed << std::setprecision(5)
<< std::showpos << point.m_coordinates.m_lat << " " << point.m_coordinates.m_lon;
node.text() = coord_ss.str().c_str();
}
/**
@@ -761,7 +765,15 @@ void EventToXml(TraffEvent const & event, pugi::xml_node & node)
node.append_attribute("probability").set_value(event.m_probability.value());
if (event.m_qDurationMins)
node.append_attribute("q_duration").set_value(std::format("{:%H:%M}", std::chrono::minutes(event.m_qDurationMins.value())));
{
auto mins = event.m_qDurationMins.value();
auto hours = mins / 60;
auto remaining_mins = mins % 60;
std::ostringstream duration_ss;
duration_ss << std::setfill('0') << std::setw(2) << hours << ":"
<< std::setw(2) << remaining_mins;
node.append_attribute("q_duration").set_value(duration_ss.str().c_str());
}
// TODO other quantifiers (not yet implemented in struct)
@@ -1159,11 +1171,10 @@ std::string FiltersToXml(std::vector<m2::RectD> & bboxRects)
{
std::ostringstream os;
for (auto rect : bboxRects)
os << std::format("<filter bbox=\"{} {} {} {}\"/>\n",
mercator::YToLat(rect.minY()),
mercator::XToLon(rect.minX()),
mercator::YToLat(rect.maxY()),
mercator::XToLon(rect.maxX()));
os << "<filter bbox=\"" << mercator::YToLat(rect.minY()) << " "
<< mercator::XToLon(rect.minX()) << " "
<< mercator::YToLat(rect.maxY()) << " "
<< mercator::XToLon(rect.maxX()) << "\"/>\n";
return os.str();
}