Как получить смещение времени UTC в C ++ с Windows OS

Мой вопрос довольно прост. Как получить смещение UTC для Филиппин, равное +8, и для Японии, равное +9, и преобразовать его в целое число?

Любые предложения — отличная помощь. Спасибо.

ОБНОВИТЬ

Для дальнейшего объяснения у меня есть настольное приложение на c ++, и мне нужно автоматически определять его часовой пояс, где бы оно ни использовалось. Например, если приложение будет использоваться в Японии, будет использоваться смещение часового пояса для Японии. Это возможно?

1

Решение

Если вы не хотите копаться в специфичном для 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.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]