Как получить смещение часового пояса в минутах на WP7? - PullRequest
6 голосов
/ 17 июля 2011

Мне нужно знать, каково смещение часового пояса для устройства, на котором запущено мое приложение, за считанные минуты. Например, для стандартного тихоокеанского времени (где я тестирую) мне нужно получить int -480. Примеры (которые я не смогу получить из моего текущего местоположения - но чтобы дать вам представление о том, что мне нужно) в Афганистане я получу 270, а в Великобритании я получу 0.

Мои лучшие попытки пока что все вернули 0, что является неправильным значением:

int timezoneOffsetInMinutes = (DateTime.Now.ToLocalTime() - DateTime.Now).Minutes// returns 0 instead of the expected -480

и

int timezoneOffsetInMinutes = TimeZoneInfo.Utc.BaseUtcOffset.Minutes - TimeZoneInfo.Local.BaseUtcOffset.Minutes;// also returns 0, not -480

Я не был уверен, что этот пост задавал тот же вопрос (так как не приводятся примеры смещений или пример кода), но один ответ, который там дан, определенно не связан с тем, что находясь в поиске.

Ответы [ 2 ]

5 голосов
/ 17 июля 2011

Если вы хотите смещение base / standard , то TimeZoneInfo, вероятно, является наиболее правильным способом доступа к этой информации (а также предоставляет вам доступ к другой информации, такой какподдерживает ли часовой пояс летнее время):

TimeSpan offset = TimeZoneInfo.Local.BaseUtcOffset;

Однако, если вы хотите текущее смещение (включая изменения летнего времени), я бы привык использовать DateTimeOffset, поскольку он в основном заменил DateTime (он может представлять "местное" время для часового пояса, отличного от локального компьютера):

TimeSpan offset = DateTimeOffset.Now.Offet;
2 голосов
/ 17 июля 2011
DateTime utc = DateTime.Now.ToUniversalTime();
DateTime local = DateTime.Now;
TimeSpan diff = (utc - local);

Возвращает правильную разницу во времени между вами и UTC.

...