Получить ПК TimeZone на C#

В настоящее время я занимаюсь разработкой asp - C# в качестве внутреннего кода. Я хочу получить текущий часовой пояс, который был установлен на ПК.

Приведенный ниже код по-прежнему определяет правильный часовой пояс моей текущей области (+8GMT), хотя я уже изменил настройки часового пояса своего ПК на другой часовой пояс.

Я хочу получить смещение часового пояса, указанное в настройках даты на ПК. Может ли кто-нибудь помочь мне в этом. Ниже мой код до сих пор.

public TimeSpan currentOffset;
public DateTime utc;
public DateTime local;

this.utc = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, TimeZoneInfo.Utc.Id);
this.local = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, TimeZoneInfo.Local.Id);
this.currentOffset = this.local.Subtract(this.utc);

2 ответа

Решение

В дополнение к ответу Дэвида Хейни.

TimeZoneInfo кэширует данные после первого вызова, поэтому любые изменения в настройках ПК не повлияют на ваше приложение, если оно уже запущено. Вы должны вызвать метод:

 TimeZoneInfo.ClearCachedData();

обновить этот кеш. Так что этот будет работать в вашем случае:

 TimeZoneInfo.ClearCachedData();
 var offsetTimespan = DateTimeOffset.Now.Offset;
 var offsetInHours = offsetTimespan.TotalHours;

Вы делаете свою жизнь сложнее, чем нужно.:)

использование DateTimeOffset: http://msdn.microsoft.com/en-us/library/system.datetimeoffset.now%28v=vs.110%29.aspx

var now = DateTimeOffset.Now;

Это будет также включать информацию о смещении часового пояса.

Другие вопросы по тегам