1#ifndef LINTEL_CORE_UTILS_DATETIMEFORMAT_H
2#define LINTEL_CORE_UTILS_DATETIMEFORMAT_H
36 using SystemTime = std::chrono::sys_time<std::chrono::microseconds>;
46 return ::_mkgmtime(
tm);
73 const int written = std::snprintf(buffer,
80 return std::string(buffer,
static_cast<std::size_t
>(
written));
93 const auto wholeSeconds = std::chrono::floor<std::chrono::seconds>(value);
94 const auto micros = std::chrono::duration_cast<std::chrono::microseconds>(value -
wholeSeconds).count();
95 const std::time_t time = std::chrono::system_clock::to_time_t(
96 std::chrono::time_point_cast<std::chrono::system_clock::duration>(
wholeSeconds));
102 const int written = std::snprintf(buffer,
104 "%04d%c%02d%c%02d %02d:%02d:%02d.%06ld",
105 local.tm_year + 1900,
113 static_cast<long>(
micros));
114 if (
written < 0) {
return {}; }
138 const auto parsed = std::from_chars(value.data() +
position, value.data() + value.size(),
result);
150 std::size_t
index = 0;
155 if (
index < value.size() && value[
index] ==
'.') {
158 while (
index < value.size() && std::isdigit(
static_cast<unsigned char>(value[
index])) != 0) {
169 if (
index < value.size() && (value[
index] ==
'Z' || value[
index] ==
'z')) {
171 }
else if (
index < value.size() && (value[
index] ==
'+' || value[
index] ==
'-')) {
214 const std::time_t time =
215 std::chrono::system_clock::to_time_t(std::chrono::time_point_cast<std::chrono::system_clock::duration>(value));
223 const int written = std::snprintf(buffer,
225 "%04d-%02d-%02dT%02d:%02d:%02dZ",
232 if (
written < 0) {
return {}; }
233 return std::string(buffer,
static_cast<std::size_t
>(
written));
bool isEastOfUtc(long offsetSeconds) noexcept
Definition DateTimeFormat.h:66
std::string formatUtcIsoSeconds(const std::chrono::sys_seconds &value)
Definition DateTimeFormat.h:212
std::string formatOffset(long offsetSeconds)
Definition DateTimeFormat.h:69
SystemTime parseSystemTime(const std::string &value)
Definition DateTimeFormat.h:126
std::string formatSystemTime(const SystemTime &value, char dateSeparator='-')
Definition DateTimeFormat.h:91
long localOffsetSeconds(std::time_t time, const std::tm &local) noexcept
Definition DateTimeFormat.h:57
std::time_t timegmPortable(std::tm *tm) noexcept
Definition DateTimeFormat.h:43
std::chrono::sys_time< std::chrono::microseconds > SystemTime
Definition DateTimeFormat.h:36
Definition BaseFeature.h:6
bool localTime(std::time_t time, std::tm &out) noexcept
Definition Platform.h:54
constexpr std::string_view type_name()
Definition TypeName.h:9