2012-03-05 3 views
1

Я делаю игру на основе поворота и пытаюсь выяснить, когда произошел последний поворот. Я заставить его работать, делая это:Рассчитайте разницу во времени, когда разные iPhone имеют разные настройки времени.

NSDate *lastTurn = [NSDate date]; (При отправке оборота)

... А потом вычислить разницу для следующего игрока, когда это его/ее очередь:

NSTimeInterval *diff = [lastTurn timeIntervalSinceNow]; 

Это отлично работает, если оба пользователя имеют одинаковые настройки времени. Но если у одного игрока есть свой iphone, установленный в другой часовой пояс или время, установленное все неправильно, результат будет неправильным.

Как я могу это исправить?

Большое спасибо

+0

Что именно вы видите, что заставляет вас сказать, что «результат будет неправильным». NSDate представляет собой момент времени, независимый от любого часового пояса. У разных пользователей в разных часовых поясах не должно быть проблем с сопоставлением значений NSDate –

ответ

1

Использование GMT ​​время вместо местного времени.

Может быть что-то вроде этого (я не пробовал):

NSInteger sec = [[[NSCalendar currentCalendar] timeZone] secondsFromGMT]; 
+0

проверьте это, чтобы узнать, как получить GMT http://stackoverflow.com/questions/1490537/gmt-time-on-iphone – twain249

0

Я думаю @StefanB есть ответ, но я бы также рассмотреть этот вопрос. Может ли кто-нибудь «обмануть», намеренно меняя часы на своем телефоне? даже с GMT. Другая мысль состоит в том, что, будучи пошаговой, предположительно, у вас будет центральный сервер, который управляет игрой. В этом случае вы можете избежать всей этой проблемы, используя время сервера, которое является общим для всех игроков и не может ими управлять.