UTC по местному времени пользователя - PullRequest
0 голосов
/ 09 августа 2010

Я создаю веб-приложение, которое будет отображать даты различных событий, которые произошли в приложении (например, создаваемый документ). Конечно, отображаемая дата должна учитывать местоположение пользователя (не просто выводить сохраненную дату вслепую, поскольку это будет местное время сервера).

Я создал пример приложения, в котором перечислены все часовые пояса, позволяет выбрать один и затем вывести несколько сохраненных дат 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;
}

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

1 Ответ

1 голос
/ 09 августа 2010

Это намного проще, чем это:)

Используйте TimeZoneInfo.ConvertTimeFromUtc - вам не нужно возиться со смещениями самостоятельно :) (В частности, ваш текущий код предполагает разницу DST ровно в один час, что не всегда правильно. )

Возможно, вы захотите использовать DateTimeOffset, чтобы не думать, что что-то есть в UTC, хотя это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...