Читаем дату SMS из бекапа iOS

Известно, что в файле 3d0d7e5fb2ce288813306e4d4636395e047a3d28 содержится SQLite-БД с сообщениями, несложные таблицы.

А чтобы перенести бекап этих сообщений на Android, надо немного сплясать с бубном. Я не нашёл ни одной апки, которая бы грамотно конвертировала дату в сообщениях — и немного погуглив — нашёл, как привести таймштамп в пристойный вид.

1. Эпл записывает слишком много нулей в конец строки. Это связано с их хитрым подсчётом секунд.
2. Эпл считает, что юникс-эпоха пошла с 2001, а не с 1970.

В итоге корректный запрос на выборку человеческих дат примерно такой:

SELECT DATETIME(`date`/1000000000 + 978307200,"unixepoch","localtime") FROM message LIMIT 10;

Ну а чтобы перенести бекап так, чтобы даты не поломались —

UPDATE message SET `date` = `date`/1000000000, date_read = date_read/1000000000, date_delivered = date_delivered / 1000000000. Ну, в зависимости от типа программы, которой вы будете пользоваться, или добавляем 30 лет дополнительно, или нет. iSMS2droid достаточно просто деления.