Как получить текущее смещение UTC (как в часовом поясе, а только смещение UTC текущего момента)?Как получить текущее смещение UTC (часовой пояс)?
Мне нужен ответ типа «+02: 00».
Как получить текущее смещение UTC (как в часовом поясе, а только смещение UTC текущего момента)?Как получить текущее смещение UTC (часовой пояс)?
Мне нужен ответ типа «+02: 00».
Есть две части к этому вопросу:
boost::posix_time::time_duration
time_duration
, как указаноВидимо, получение зона местного времени не очень хорошо проявляется в широко реализованном API. Мы можем, однако, получить его, принимая разницу в момент, по отношению к UTC и тот же момент относительно текущего часового пояса, как это:
boost::posix_time::time_duration get_utc_offset() {
using namespace boost::posix_time;
// boost::date_time::c_local_adjustor uses the C-API to adjust a
// moment given in utc to the same moment in the local time zone.
typedef boost::date_time::c_local_adjustor<ptime> local_adj;
const ptime utc_now = second_clock::universal_time();
const ptime now = local_adj::utc_to_local(utc_now);
return now - utc_now;
}
Форматирование смещения, как указано только вопрос из наполняя право time_facet
:
std::string get_utc_offset_string() {
std::stringstream out;
using namespace boost::posix_time;
time_facet* tf = new time_facet();
tf->time_duration_format("%+%H:%M");
out.imbue(std::locale(out.getloc(), tf));
out << get_utc_offset();
return out.str();
}
Теперь get_utc_offset_string()
даст желаемого результата.
Поскольку C++ 11 вы можете использовать хроно и std::put_time:
#include <chrono>
#include <iomanip>
#include <iostream>
int main()
{
using sc = std::chrono::system_clock;
auto tm = sc::to_time_t(sc::now());
std::cout << std::put_time(std::localtime(&tm), "formatted time: %Y-%m-%dT%X%z\n");
std::cout << "just the offset: " << std::put_time(std::localtime(&tm), "%z\n");
}
Это производит следующий вывод:
отформатирован время: 2018-02-15T10: 25: 27 + 0100
только смещение: +0100
Это сложный вопрос; например, конкретное смещение UTC может соответствовать, например, нескольким часовым поясам. – 2010-10-04 11:16:22
@Roger: Итак ... Я думаю, правильный способ сказать, что я ищу смещение UTC для текущего времени, а не часового пояса? –
Да, если это то, что вас интересует (это тоже то, что мне кажется), этот ответ на месте. Я ответил больше на то, что «локальный часовой пояс не очень хорошо проявляется в широко реализованном API». Просто имейте в виду, что UTC-компенсация, которую вы получите сегодня, может быть другой позже (или раньше). – 2010-10-04 11:31:37