Если вы используете .Net, вы можете использовать TimeZoneInfo
. Поскольку вы пометили вопрос с помощью «c #», я предполагаю, что вы делаете.
Первый шаг - получение TimeZoneInfo
для часового пояса, в который требуется преобразовать. В вашем примере часовой пояс Нью-Йорка. Вот способ, которым вы можете сделать это:
//This will get EST time zone
TimeZoneInfo clientTimeZone
= TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
//This will get the local time zone, might be useful
// if your application is a fat client
TimeZoneInfo clientTimeZone = TimeZoneInfo.Local;
Затем, после того, как вы прочитали DateTime
из вашей БД, вы должны убедиться, что Kind
установлено правильно. Предположим, что DateTime
в БД находятся в UTC (кстати, это обычно рекомендуется), вы можете подготовить его для преобразования следующим образом:
DateTime aDateTime = dataBaseSource.ReadADateTime();
DateTime utcDateTime = DateTime.SpecifyKind(aDateTime, DateTimeKind.Utc);
Наконец, чтобы преобразовать в другой часовой пояс, просто сделайте это:
DateTime clientTime = TimeZoneInfo.ConvertTime(utcDateTime, clientTimeZone);
Некоторые дополнительные замечания:
TimeZoneInfo
можно хранить в статических полях, если вас интересуют только несколько конкретных часовых поясов;
TimeZoneInfo
хранить информацию о переходе на летнее время. Таким образом, вам не придется беспокоиться об этом;
- Если ваше приложение является веб-сайтом, выяснить, в каком часовом поясе находится ваш клиент, может быть сложно. Один способ объясняется здесь: http://kohari.org/2009/06/15/automagic-time-localization/
Надеюсь, это поможет. :)