Elias Chashchin
февраль 2016.
67871

Почему в iPhone нельзя выставить дату 1 января 1970 года?

Ответить
Ответить
Комментировать
0
Подписаться
4
6 ответов
Поделиться
АВТОР ВОПРОСА ОДОБРИЛ ЭТОТ ОТВЕТ

В системе описания моментов времени UNIX, которая используется в iOS, отсчет ведется как раз от 1 января 1970 года. То есть эта дата / время представлена как ноль в памяти устройства. На данный момент есть два распространенных предположения, объясняющих крах iOS при нулевом значении времени.

1) В коде iOS присутствует операция деления на текущее время (unix timestamp). Деление на ноль приводит к ошибке;

2) Часовой пояс на устройстве отстает от GMT, что может привести к отрицательному значению unix timestamp, что также может привести к ошибке;

101
0

Я, конечно, понимаю, что айфон был выпущен гоаздо позже 1970 года, но мне всегда было интересно, как можно было упустить настолько очевидную ошибку.

0
Ответить

Константин, вы великий разум, для вас очевидны ошибки, которые не замечают или замечают и не могут исправить плебеи из Apple. Почему же они там работают а не вы? Почему они получают такие большие зарплаты? Может быть это все не так просто как кажется?

+3
Ответить

Константин, любая ошибка становится очевидной, когда она найдена :)

+25
Ответить
Ещё 3 комментария

Уважаемый Санёк! Позвольте спросить у Вас, в каком месте я плохо отозвался о компании? Я очень уважаю Apple и все их достижения, потому мне всегда и казалось странным то, что их устройство может превратиться в кирпич(хоть и на время) из-за того, что время на устройстве стало < 0.

+8
Ответить

Кстати, иногда у меня просто выключается телефон и, когда я его включаю, там 3:00(иногда 3 с лишним) 1 января 1970

+3
Ответить

Функцию time() уже переделали в обновах. Даже если у кого то и старая версия прошивки, достаточно отсоединить аккумулятор на какое то время и конденсаторы разрядятся, ОЗУ очистится и время ресетнется

0
Ответить
Прокомментировать

Есть способ, который позволяет особо без проблем восстановить девайс после того, как Вы все таки убедились, что действительно что-то произойдет, а именно: берем канцелярскую резинку (можно придумать и свое приспособление, но я делал именно так) и плотно так обматываем телефон таким образом, что бы кнопка включения всегда была зажата. Затем оставляем на ночь (или больше) в таком состоянии до тех пор пока он не перестанет подавать признаки жизни. Все это время аппарат будет в цикле загрузка-перезагрузка, пока полностью не разрядится аккумулятор, это нам собственно и нужно. Затем, ставим девайс заряжаться (желательно родным зарядным устройством или с аналогичными параметрами) до тех пор пока он не вернется к жизни.

Ну и более скоростной способ: разбираем аппарат, отключаем АКБ от платы, считаем 5 секунд, возвращаем все назад...включаем и видим 1 января 1970 год 0:01 минута на реанимированном девайсе :)

Данный способ был открыт чисто случайно с мыслью "а вдруг прокатит".

25
0
Прокомментировать

Насчет первого варианта спорили с коллегой, думаю, что деление на ноль тут не причем. Так как в любую секунду, отличную от 0:00:00 1.01.1970 timestamp не равен нулю.
Про разницу с часовыми поясами интересно, у Wylsacom на канале я слышал это предположение, если оно верно, то должен вот-вот выйти ролик, в котором время GMT в поправкой на часовой пояс снова перевалило за ноль и телефон должен включиться.
Еще встречал сегодня интересное предположение по поводу того, что когда устанавливаешь это злополучную дату и перезагружаешь аппарат, все сертификаты iphone'a становятся невалидными из-за того, что срок их действия еще не наступил. Будем ждать дальнейшего развития событий и конечно патча iOS, а пока ставим пароли на свои девайсы и не даем в руки посторонним =)

26
-2

Но ведь деление на ноль может происсходит и до запуска таймера, т.е. timestamp всегда будет оравен нулю.

0
Ответить

Зачем вообще делить на всё время? Где это может понадобится?

+3
Ответить
Прокомментировать

По сети ходит эта картинка в разных вариациях. Понятно, что ничего крутого с айфоном не случится, иначе бы это было во всех новостях, а не в каких-то картинках. Айфон просто возьмет и зависнет. Он не будет включаться ни после перезагрузки, ни после перепрошивки, ни после прошивки через режим DFU (что-то вроде сервисного режима) Кто умеет в английский вот вам Reddit https://www.reddit.com/r/jailbreak/comments/458ao3/di..

Почему так происходит?

Скорее всего потому, что в телефонах и компьютерах используется не привычный человеку способ записи времени (дата-месяц-год), а UNIX-время, представленное целым числом, которое увеличивается с каждой прошедшей секундой. Таким образом дата на календаре вашего телефона сменяется каждые 86400 секунд не смотря ни на что. А началом отсчета в этом UNIX-времени принята именно 1 января 1970 года. И когда вы ставите это число на своем айфоне, то он, подстраиваясь под ваш часовой пояс, загоняет время в отрицательные величины и из-за этого не может загрузиться потому, что время не может быть отрицательным.

Что делать?

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

И хватит верить всему, что говорят в интернете, пожалуйста.

14
-2
Прокомментировать

Не знаю,что там вышло у других,но сколько бы я не мотал дальше,чем 1 января 2001 года у меня не выставляется дата. Причем ставится 03.00 ночи,а раньше никак.

0
0
Прокомментировать
Читать ещё 1 ответ
Ответить
Читайте также на Яндекс.Кью
Читайте также на Яндекс.Кью