Как конвертировать DateTime в конкретный часовой пояс?
Мне трудно понять, как работает UTC.
Я должен сделать следующее, но я все еще запутался, если бы получил правильный результат.
Цели:
- Как анализировать дату / время из строки?
- Глобально конвертировать UTC DateTimes в пользовательские локальные DateTimes
- Преобразование времени UTC / GMT в местное время
- Как работает DateTime.ToUniversalTime ()?
- Поддерживает ли Windows 10 UTC время BIOS?
- Убедитесь, что все сохраненные даты в базе данных находятся в формате UTC
- Обновление DefaultTimezone находится в Маниле
- Убедитесь, что все возвращенные даты указаны в Маниле
Таким образом, код:
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; } }
- Преобразование эпохи UTC в локальную дату
- Entity Framework DateTime и UTC
- Должен ли MySQL установить часовой пояс в UTC?
- Как конвертировать дату UTC в локальный часовой пояс в MySql Select Query
- Преобразование UTC в текущее время локали
- Java Convert GMT / UTC к локальному времени не работает должным образом
- Часы Windows, показывающие как UTC, так и местное время?
- Заставить часовой пояс Java как GMT / UTC
У платформы .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);