Я использую устаревшее приложение DMS, которое сохраняет даты, используя GMT 0 (Гринвич) в качестве часового пояса по умолчанию, и применяет к нему спред на 1 час.Я должен отобразить с помощью GridView эти записи, и мне нужно применить своего рода преобразование в соответствии с относительным местоположением, в котором работает моя система (например, Лондон, Багамские острова).
Рассматривая, как устаревшая система работает с датами,Я разработал следующий алгоритм для правильного отображения дат (мой код основан на asp.net / C #):
//Example for Bahamas, GMT: -5 Hours as offset, I should add 4 hours to the DB date
//Example for London, GMT: 0 Hour as offset, I should add 1 hour to the DB date
DateTime dateToDisplay;
int spreadHours = 0;
TimeZone cur = TimeZone.CurrentTimeZone;
DaylightTime daylight = cur.GetDaylightChanges(dateFromDb.Year);
DateTime start = daylight.Start;
DateTime end = daylight.End;
if (dateFromDb.CompareTo(start) <= 0 || dateFromDb.CompareTo(end) >= 0)
{
spreadHours = -1 - (cur.GetUtcOffset(dateFromDb).Hours);
}
else
{
spreadHours = - (cur.GetUtcOffset(dateFromDb).Hours);
}
dateToDisplay = dateFromDb.AddHours(spreadHours);
Однако я не уверен, что с помощью этого процесса я смогу охватить все случаи или есть лиможет быть лучшим решением для достижения того же результата.
Кто-нибудь может подтвердить мою идею или предложить лучший путь?