2012-04-16 5 views
2

При использовании TimeZoneInfo.Local.Id на MonoTouch я получаю CET (для среднеевропейского времени). На ASP.NET я получаю Central Europe Standard Time.TimeZoneInfo на MonoTouch и .NET не соответствует

Мне нужно передать часовой пояс с устройства iOS (MonoTouch) на веб-службу ASP.NET. Недостаточно просто перевести разницу часовых поясов (UTC +1), так как это не соответствует настройкам летнего времени для конкретной страны.

Каков наилучший способ получить часовой пояс iPhone для моего веб-сервиса?

ответ

4

Существует более одного источника данных для часовых поясов внутри MonoTouch.

Один из библиотеки базового класса .NET (BCL), System.TimeZoneInfo и предназначен для совместимости (это структура, а не данные) с реализацией Microsoft .NET. Он имеет два недостатка.

  • он не на 100% совместим с данными MS (используется другой источник данных);

  • он не может быть обновлен без повторного создания приложения с обновленным MonoTouch;

Другой - MonoTouch.Foundation.NSTimeZone, которые являются привязками к API iOS. API немного отличается, но возвращаемые данные соответствуют тем, что будут использовать другие приложения iOS, и они будут обновлены (с обновлениями iOS).

Каков наилучший способ получить часовой пояс iPhone для моего веб-сервиса?

IMO MonoTouch.Foundation.NSTimeZone лучше подходит по вышеуказанным причинам.

Недостаточно просто перевести разницу в часовом поясе (UTC +1), так как это не соответствует настройкам летнего времени для конкретной страны.

Что касается ваше смещения UTC вы можете получить дневной свет специфического смещения (в секундах), с:

var dlo = NSTimeZone.LocalTimeZone.DaylightSavingTimeOffset (NSDate.Now); 
+0

Спасибо, я собираюсь попробовать класс NSTimeZone. Что касается DST, для меня недостаточно улавливать ** текущее ** смещение DST, мне нужен полный часовой пояс. В противном случае я не могу рассчитать смещение DST пользователя в будущем, так как даты переключения DST меняются. – cheeesus

+0

Для 'NSTimeZone' доступно гораздо больше API, см. Http://api.xamarin.com/?link=T%3aMonoTouch.Foundation.NSTimeZone – poupou

1

Поскольку устройства разные - я бы посмотрел на получение сопоставления между ними.

Возможно, ваше приложение Monotouch должно сделать это - для каждого идентификатора TimeZoneInfo, указанного в доступных часовых поясах, сохраните сопоставление с идентификатором для того же TimeZoneInfo на ваших серверах.

Кроме того, имейте в виду, что временные интервалы на сервере управляются обновлением Windows и, возможно, не обязательно будут одинаковыми на каждом веб-сервере (если у вас есть ферма) - так как я обнаружил, что на днях я обнаружил мое существенное раздражение на одном из мои веб-приложения. Для получения дополнительной информации: http://support.microsoft.com/gp/cp_dst

1

TimeZoneInfo 0: TimeZoneInfo 0: TimeZoneInfo В Windows используются идентификаторы часовых поясов Windows, в то время как предположительно на MonoTouch он будет использовать все, что у iOS-идентификаторов (хотя я немного удивлен, что вы получаете CET, а не имя zoneinfo).

Даже если вы наберете между ними, я бы не ожидал получить одинаковые результаты. Windows будет обновлять информацию о часовом поясе в разное время до iOS. Вы должны либо выполнять все расчеты часовых поясов в одной системе, или использовать свои собственные «встроенные» временные зоны в обоих местах для обеспечения согласованности. Мой Noda Time проект может работать здесь, но я никогда не пробовал использовать его в MonoTouch.

Смежные вопросы