Мы пытаемся создать базовую функцию составления календаря событий, которая позволяет пользователю создавать событие и указывать время начала для данного месяца, дня, года, часа и минуты, а также часовой пояс (System.TimeZoneInfo.Id
). Система CMS генерирует результирующее System.DateTime
на основе местоположения нашего сервера, скажем, TimeZoneInfo.Id
Стандартное время горы . CMS не предоставляет опцию с их компонентом выбора даты для указания часового пояса. Однако у нас есть контроль над точностью даты и времени в SQL, по умолчанию установлен на 7
.
DateTime
форматируется как yyyyMMddTHHmmssZ
для целей заполнения времени начала / окончания в .ics / ical. С этим форматом 25 мая 2018 г. в 19:00 (20180508T192840Z
) всегда будет выглядеть как стандартное время горы (MST) сервера, а не 25 мая 2018 г. в 7:00 вечера в выбранное восточное стандартное время (EST).
Как я могу "заменить" часовой пояс для DateTime
, который генерируется без изменения года / месяца / дня / часа / минуты, на DateTime
, DateTimeOffset
, TimeZoneInfo
, NodaTime
, или даже string
функции для форматирования в yyyyMMddTHHmmssZ
?
Следующее:
TimeZoneInfo destinationTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var converted = TimeZoneInfo.ConvertTime(dateTime1, destinationTimeZone);
или
LocalDateTime fromLocal = LocalDateTime.FromDateTime(dateTime1);
DateTimeZone fromZone = DateTimeZoneProviders.Tzdb["America/Denver"];
ZonedDateTime fromZoned = fromLocal.InZoneLeniently(fromZone);
DateTimeZone toZone = DateTimeZoneProviders.Tzdb["America/Chicago"];
ZonedDateTime toZoned = fromZoned.WithZone(toZone);
LocalDateTime toLocal = toZoned.LocalDateTime;
var result = toLocal.ToDateTimeUnspecified();
Создает новый DateTime
с часами, скорректированными с CST на EST, который не будет работать, поскольку цель состоит в том, чтобы получить DateTime
с исходным значением часа, но с TimeZoneInfo.Id
Восточное стандартное время .
DateTime
конструктор, по-видимому, не имеет конструктора, определяющего TimeZoneInfo
, только DateTimeKind
.
Как это можно сделать с некоторыми, например DateTime
, созданными из DateTime.Now
?