Boost.DateTime: Как создать local_date_time, представляющий сегодняшний день в произвольном часовом поясе в определенноеC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Boost.DateTime: Как создать local_date_time, представляющий сегодняшний день в произвольном часовом поясе в определенное

Сообщение Anonymous »

Я использую Boost.DateTime, и мне нужно создать объект local_date_time, представляющий текущую дату в определенном часовом поясе и в определенное время. Важно отметить, что это время не обязательно будет соответствовать UTC или часовому поясу системы. Мне нужен этот код для работы с произвольным часовым поясом.
Например, если сейчас 10 января 2025 года 23:30:00 в часовом поясе Америки/Нью-Йорка, я мог бы захотеть создайте объект local_time, представляющий эту дату в 16:30 (так что я должен получить дату 10 января 2025 г., 16:30:00). Если пройдет один час и текущая дата/время будут 11 января 2025 года 00:30:00, то тот же алгоритм и целевое время должны привести к созданию объекта даты/времени 11 января 2025 года 16:30:00.
Мне не удалось придумать способ добиться этого — Boost.DateTime, и это не смешно. Казалось бы, очевидным путем будет использование boost::local_time::local_sec_lock() для получения текущей даты/времени в выбранном мной часовом поясе, а затем создание нового объекта local_date_time с компонентом даты local_sec_lock и выбранным мной временем:< /p>

Код: Выделить всё

local_date_time TodayAtTime(time_zone_ptr timezone, time_duration targetTime)
{
local_date_time now = local_sec_clock::local_time(timezone);
return local_date_time(now.date(), targetTime, timezone, local_date_time::EXCEPTION_ON_ERROR);
}
Однако вышеописанное не работает, поскольку local_date_time::date() возвращает сегодняшнюю дату в формате UTC, а не в часовом поясе, связанном с объектом local_date_time. Эта ссылка на godbolt демонстрирует проблему:
https://godbolt.org/z/j3acfznos
Единственный жизнеспособный метод, который я нашел до сих пор, - это для сериализации теперь в std::ostringstream, проанализируйте строку, чтобы найти год, месяц и день, и используйте это для создания local_date_time. Однако это до смешного запутанный метод. Наверняка есть способ добиться того, что мне нужно, в API Boost.DateTime?

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-a-arbitr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»