Мне нужно сериализовать экземпляр даты и времени UTC из java в С++, используя минимальную длину чистого ByteBuffer беззнаковых символов. Мне нужна точка времени, чтобы иметь возможность поддерживать минимальную точность в наносекундах.
Со стороны java я просмотрел классы ZonedDateTime и OffsetDateTime и увидел, какой примитив они используют для хранения времени, и все вместе это равно 17 байтам, что довольно много.
Обратите внимание, что здесь я не передаю саму зону, так как не нашел способа сопоставить эти строки зоны из IANA с целыми числами. Таким образом, я думаю, смещения зоны будет достаточно. Поскольку купленные стороны должны будут преобразовать свою точку времени в определенное смещение перед отправкой на сервер, скажем, это будет UTC 0. Я ищу решение, которое ищет местное время, то есть без участия NTP-серверов!
сторона java выглядит так:
// 4 byte
Integer year = offsetDateTime.getYear();
// 1 byte
Integer month = offsetDateTime.getMonthValue();
// 1 byte
Integer day = offsetDateTime.getDayOfMonth();
// 1 byte
Integer hour = offsetDateTime.getHour();
// 1 byte
Integer minutes = offsetDateTime.getMinute();
// 1 byte
Integer seconds = offsetDateTime.getSecond();
// 4 byte
Integer nanoSeconds = offsetDateTime.getNano();
// 4 byte
Integer utcZoneTimeTotalSecondsOffset = offsetDateTime.getOffset().getTotalSeconds();
на стороне С++ мне нужно сделать то же самое, а также иметь возможность построить момент времени из всех этих целых чисел выше. Я нашел, как получить указанную выше информацию, кроме utcOffset, т.е. последнего целого числа.
я хотел бы использовать chrono для использования этого буфера и создания из него момента времени. однако я не могу найти способ получить смещение времени в С++. Как мне получить смещение времени с помощью хроно, а затем построить момент времени из приведенной выше информации?
auto now = std::chrono::system_clock::now();
time_t itt = std::chrono::system_clock::to_time_t(now);
tm utc_tm = *gmtime(&itt);
std::cout << utc_tm.tm_year + 1900 << '-';
std::cout << utc_tm.tm_mon + 1 << '-';
std::cout << utc_tm.tm_mday << ' ';
std::cout << utc_tm.tm_hour << ':';
std::cout << utc_tm.tm_min << ':';
std::cout << utc_tm.tm_sec << '\n';
? wher is the time zoneOffset here ?
если я использую
utc_tm.tm_gmtoff
это дает мне неверную информацию. по крайней мере в моем случае. Итак, я считаю, что gmtoff - это не путь, но если gmtoff не путь, то что?