Если вы используете .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
«s в БД в формате 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/
Надеюсь, это поможет. :)
Это должно быть принято как ответ – 2012-05-05 18:11:30