Как конвертировать DateTime в конкретный часовой пояс?

Мне трудно понять, как работает UTC.

Я должен сделать следующее, но я все еще запутался, если бы получил правильный результат.

Цели:

  1. Убедитесь, что все сохраненные даты в базе данных находятся в формате UTC
  2. Обновление DefaultTimezone находится в Маниле
  3. Убедитесь, что все возвращенные даты указаны в Маниле

Таким образом, код:

public ConvertDate(DateTime? dateTime) { if (dateTime != null) { Value = (DateTime)dateTime; TimeZone = GetFromConfig.DefaultTimeZone(); } } public ConvertDate(DateTime? dateTime, int GMTTimeZone) { if (dateTime != null) { Value = (DateTime)dateTime; TimeZone = GMTTimeZone; } } public int TimeZone { get { return m_TimeZone; } set { m_TimeZone = value; } } DateTime m_Value; public DateTime Value { get { return m_Value; } set { m_Value = value; DateTime converted = m_Value.ToUniversalTime().ToLocalTime(); } } 

Использование образца:

 DateTime SampleInputFromUser = new DateTime(2012, 1, 22); ConvertDate newConversion = new ConvertDate(SampleInputFromUser, 21); DateTime answer = newConversion.Value; 

Теперь я запутался в «TimeZone». Я не знаю, как использовать его для достижения целей.
Надеюсь, вы поймете мой вопрос и постараетесь добиться поставленных целей.

редактировать

В соответствии с ответом @raveturned, я получаю следующий код:

*** Добавлено в метод ConvertDate

 TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey()); ManilaTime = TimeZoneInfo.ConvertTime(dateTime.Value, TimeZoneInfo.Local, timeInfo).ToUniversalTime(); 

** Новая недвижимость

 DateTime _ManilaTime; public DateTime ManilaTime { get { return _ManilaTime; } set { _ManilaTime = value; } } 

У платформы .NET уже есть classы и методы, доступные для преобразования DateTimes между разными часовыми поясами. Посмотрите на методы ConvertTime classа TimeZoneInfo .

Изменить: когда вы получаете время для ввода в базу данных, предполагая, что оно было создано с правильной информацией о часовом поясе, вы можете легко конвертировать в UTC:

 DateTime utcTime = inputDateTime.ToUniversalTime(); 

Получите timeInfo как сделано в вопросе редактирования:

 TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey()); 

Когда вы отправляете время базы данных пользователю, преобразуйте его в правильный часовой пояс, используя timeInfo .

 DateTime userTime = TimeZoneInfo.ConvertTimeFromUtc(dbDateTime, timeInfo); 

Лично я бы попытался сохранить эту логику отдельно от методов get / set.

 TimeZoneInfo infotime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time (Mexico)"); DateTime thisDate = TimeZoneInfo.ConvertTimeFromUtc(datetimeFromBD, infotime); 
  • Поддерживает ли Windows 8 UTC как время BIOS?
  • JavaScriptSerializer UTC DateTime вопросы
  • Преобразование метки времени ISO 8601 в NSDate: как вы работаете с временным смещением UTC?
  • Часы Windows XP установлены неправильно после возобновления сна
  • Лучшее время для летнего времени и часовых поясов
  • Разница между UTC и стандартным временем GMT в .NET.
  • Где спецификатор формата DateTime 'Z'?
  • Преобразование даты времени UTC в локальное время
  • Преобразование строки datetime UTC в локальное datetime с помощью Python
  • Windows 7 просыпается от сна и UTC?
  • Всегда ли полезно хранить время в UTC или это тот случай, когда лучше хранить в местное время?
  • Давайте будем гением компьютера.