#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. Обратите внимание, что это включает как дневной, так и не дневной свет в зависимости от сохраненной даты. Таким образом, вам не нужно знать, когда наступает дневной свет — это включено в часовой пояс Олсона.
Посмотрите и здесь.