снова я должен создать модуль даты, и снова я живу в ужасе от его совершенствования, это я или дата и время самые грязные животные в профессии программиста, это зверь, скрывающийся за дверью, который я желаю, чтобы я никогда не иметь дело с: (
Кто-нибудь знает великий источник, из которого я могу узнать, который имеет дело с датами в следующих аспектах:
- пользователь вводит дату, время и часовой пояс
- система переводит в универсальное время и экономит в источнике данных
- система извлекает универсальное время, преобразованное в местное время, выбранное разработчиком (не по местоположению сервера или клиента, которое может не подходить для отображения)
- система должна учитывать различия в летнем времени
- не может полагаться на синтаксический анализ «DateTime», так как он анализируется богемно относительно времени локального сервера
- должен давать возможность разработчику иметь дело с обеими формами: дата-время и строковые объекты
Я посмотрел на blogengine.net, чтобы увидеть, как они справляются, но это слишком, они сохраняют разницу во времени в часах в источнике данных настроек, это абсолютно неточно ... какие-либо источники, чтобы помочь?
Я уже далеко зашел в создании необходимых методов, которые используют CultureInfo, TimeZoneInfo, DateTimeOffset ... но когда я проверял его, он не удался! признателен за помощь
EDIT:
Сжав еще немного, я сузил это до:
public string PrettyDate(DateTime s, string format)
{
// this one parses to local then returns according to timezone as a string
s = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(s, "AUS Eastern Standard Time");
CultureInfo Culture = CultureInfo.CreateSpecificCulture("en-au");
return s.ToString(format , Culture);
}
проблема в том, что я знаю, что переданная дата - время UTC, потому что я использую
DateTimeOffset.Parse(s, _dtfi).UtcDateTime;
// where dtfi has "yyyy-MM-ddTHH:mmzzz" as its FullDateTimePattern
когда я вызываю функцию в моем datetime, вот так:
AuDate.Instance.PrettyDate(el.EventDate,"yyyy-MM-dd HH:mm zzz");
на моей машине я получаю:
2009-11-26 15:01 +11:00
на сервере я получаю:
2009-11-26 15:01 -08:00
Я нахожу это очень странным! почему часовой пояс неверный? все остальное на месте! я что-то пропустил?