Что мне нужно сохранить в базе данных, чтобы иметь возможность конвертировать в UTC?

#c# #.net #datetime #timezone

#c# #.net #дата и время #Часовой пояс

Вопрос:

Моя проблема в том, что у меня много данных, содержащих дату и время (по собственному местному времени), и мне нужно преобразовать их в UTC. Это выглядит так:

 class Data
{
  int id; //Some id for database
  DateTime time; //Time in local time, i need to convert it to utc
}

//Converting:
1)Find this id in database and extract some info (which excatly?)
2)Convert time to UTC
  

Мой вопрос: какие данные мне нужно хранить в базе данных, чтобы правильно конвертировать время?

Моя версия такова: сохранить целочисленную разницу в часах между местным временем и utc и преобразовать, добавив ее к местному времени. Но является ли это подходящим решением?

Комментарии:

1. Будет ли ваше приложение действительно работать в нескольких часовых поясах?

Ответ №1:

Общепринятым решением является всегда сохранять дату и время UTC, а затем преобразовывать его в местное время при загрузке или отображении его пользователю

Ответ №2:

Сохранения целочисленной разницы недостаточно, потому что это не делает различий между, скажем, переходом на летнее время (DST) и не-DST.

Лучший способ — сохранить часовой пояс. Универсальной и очень хорошо поддерживаемой системой часовых поясов является Olson Tz.

Это ссылки по названиям крупных городов, которые являются репрезентативными для часового пояса. Например, фактическим временем будет America Los_Angeles. Обратите внимание, что это включает как дневной, так и не дневной свет в зависимости от сохраненной даты. Таким образом, вам не нужно знать, когда наступает дневной свет — это включено в часовой пояс Олсона.

Посмотрите и здесь.