Мой вопрос довольно прост. Как получить смещение UTC для Филиппин, равное +8, и для Японии, равное +9, и преобразовать его в целое число?
Любые предложения — отличная помощь. Спасибо.
ОБНОВИТЬ
Для дальнейшего объяснения у меня есть настольное приложение на c ++, и мне нужно автоматически определять его часовой пояс, где бы оно ни использовалось. Например, если приложение будет использоваться в Японии, будет использоваться смещение часового пояса для Японии. Это возможно?
Если вы не хотите копаться в специфичном для Windows API, здесь есть переносимый и, вероятно, стандартный код C ++ будущего1 сделать это с помощью Библиотека часовых поясов Говарда Хиннанта.
#include "date/tz.h"#include <iostream>
int
main()
{
using date::operator<<;
using std::chrono::system_clock;
std::cout << date::current_zone()->get_info(system_clock::now()).offset << '\n';
}
date::current_zone()
определяет текущий часовой пояс компьютера. Это возвращает указатель на date::time_zone
которая имеет функцию-член под названием get_info()
,
Ты можешь позвонить time_zone::get_info
либо с UTC time_point
или local_time
time_point
получать все виды информации об этом часовом поясе в указанный момент времени (так как информация меняется со временем в соответствии с текущей политикой). Использование system_clock::now()
как time_point
получит текущую информацию для time_zone
,
date::sys_info
возвращается, который является агрегатом, один из членов которого называется offset
, Это текущее смещение UTC с единицами измерения std::chrono::seconds
,
Это просто вывод для меня:
-14400s
Указывает, что мой текущий часовой пояс 14400 секунд к западу от UTC.
Для типичного кода не следует программировать на уровне прямого добавления смещений UTC. Для этого есть высокоуровневый API. Использование высокоуровневого API предотвращает неосторожные ошибки, такие как добавление смещения UTC, когда вы должны были вычесть (или наоборот). Однако этот низкоуровневый API существует, потому что иногда низкоуровневый доступ к такой информации делает вашу программу эффективной.
Например, вот код более высокого уровня, который просто печатает текущее местное время:
std::cout << date::make_zoned(date::current_zone(), system_clock::now()) << '\n';
system_clock::now()
все еще явно вызывается, но теперь добавление смещения UTC, а также вызов current_zone()->get_info()
инкапсулирован в этом высокоуровневом API.
1 Эта библиотека была недавно утверждена в рабочий проект C ++ 20.
Других решений пока нет …