Лучший способ синхронизировать время iPhone с сервером - PullRequest
6 голосов
/ 18 июля 2011

У меня есть модель клиент-сервер, где сервер будет отправлять некоторые данные с параметрами даты, и iPhone потребуется для их рендеринга.Сервер и iPhone будут находиться в разных часовых поясах.Поэтому мне нужно синхронизировать время в обоих.Допустим, пользователь выполнил некоторую активность в «18.07.2011 / 04/45 / EDT» (время сервера).Со стороны iPhone мне нужно преобразовать эту строку даты в объект NSDate.

Каков наилучший способ добиться этого.

Спасибо

Ответы [ 3 ]

3 голосов
/ 02 октября 2013

Извините за поздний ответ, просто посмотрел "Синхронизация NSDate с сервером" в Google и получил здесь. Я застрял с той же проблемой и написал эту милую небольшую категорию, которая помогает.

Может возвращать объект NSDate, синхронизированный с любым веб-сервером только с одним HTTP-запросом (за сеанс).

https://github.com/freak4pc/NSDate-ServerDate

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

2 голосов
/ 19 июля 2011

Если вы хотите, чтобы время на сервере и клиенте было одинаковым, синхронизируйте оба с NTP (сетевой протокол времени).Существует клиент obj-c ntp, доступный по номеру http://code.google.com/p/ios-ntp/source/browse/trunk/ntpA.xcodeproj/project.pbxproj?spec=svn25&r=25

. Как указано выше, всегда сохраняйте / отправляйте время как метки времени Unix (секунды с начала UTC эпохи) и при необходимости преобразуйте в часовые пояса.

1 голос
/ 18 июля 2011

Вы можете определенно достичь этого следующим образом:

1) При первом получении данных с сервера передайте значение даты как «» (пусто). Таким образом, сервер определит, что пользователю требуются все данные.

2) В вышеуказанном сервисе добавьте тег «Дата» в веб-сервисе сервера. Таким образом, когда вы получаете другие данные, вы также можете получить дату сервера. Итак, сохраните дату этого сервера в локальном.

3) В следующий раз, когда вы получите другие данные, затем передайте эту сохраненную дату (которая будет в формате сервера и в часовом поясе), чтобы сервер предоставил вам только те данные, которые были добавлены или изменены после этих данных.

4) Таким образом, вы можете справиться с проблемой даты. А также не будет проблем с местным временем или часовым поясом.

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

Я реализовал это в большинстве моих приложений, и он работает нормально.

Для даты UTC, вы можете использовать следующую функцию:

-(NSString *)getUTCFormateDate
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    [dateFormatter setTimeZone:timeZone];
    [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
    NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
    //NSLog(@"UTC Date = %@",dateString);

    return dateString;
}

Надеюсь, это будет полезно для вас.

Спасибо.

...