Я создаю веб-приложение, которое будет отображать даты различных событий, которые произошли в приложении (например, создаваемый документ). Конечно, отображаемая дата должна учитывать местоположение пользователя (не просто выводить сохраненную дату вслепую, поскольку это будет местное время сервера).
Я создал пример приложения, в котором перечислены все часовые пояса, позволяет выбрать один и затем вывести несколько сохраненных дат UTC в выбранном часовом поясе, добавив час, когда часовой пояс наблюдает летнее время.
У меня вопрос: это оптимальный подход и / или я что-то упустил, когда этот подход не будет работать во всех случаях?
static void Main(string[] args)
{
List<DateTime> events = new List<DateTime>();
events.Add(DateTime.UtcNow);
events.Add(DateTime.UtcNow.AddDays(1));
events.Add(DateTime.UtcNow.AddDays(7));
var timeZones = TimeZoneInfo.GetSystemTimeZones();
for (var i = 0; i < timeZones.Count; i++)
{
Console.WriteLine(i + " : " + timeZones[i].DisplayName);
}
var currentZone = timeZones[Convert.ToInt32(Console.ReadLine())];
Console.WriteLine("UTC Event: {0}", events[0]);
Console.WriteLine("Local Event: {0}", correct(events[0], currentZone));
Console.ReadKey();
}
static DateTime correct(DateTime date, TimeZoneInfo timeZone)
{
var correctedDate = date.AddHours(timeZone.BaseUtcOffset.TotalHours);
if (timeZone.IsDaylightSavingTime(date))
{
return correctedDate.AddHours(1);
}
return correctedDate;
}
Я получаю результаты, которые ожидаю от результатов, я просто обеспокоен тем, что сложная проблема часовых поясов не может быть так просто решить.