Який формат використовує дату apple apple sqlite db?


1

Я хочу витягнути тексти приміток і дати модифікації з бази даних приміток sqlite, витягнутої з резервної копії пристрою iOS. Але я не можу зрозуміти, як перетворити формат дати в читабельний рядок дати.

Як я отримав дані

Я дізнався, у якому файлі були дані примітки на цій сторінці .

Відповідна частина:

Step 1. Find the Backup File in ~/Library/Application Support/MobileSync/Backup/fea….627
        something like : ca3b….39c
       If you have trouble seeing Library folder 
       defaults write com.apple.Finder AppleShowAllFiles Yes
Step 2. Copy file and rename as notes.sqlite 

Що я спробував поки що

Я відкрив файл і підтвердив, що в ньому є очікуваний текст примітки. Текст тексту знаходиться всередині таблиці під назвою ZNOTEBODY. Інша названа таблиця ZNOTEмістить ZBODYстовпчик aa, який, як видається, містить показники в ZNOTEBODYтаблиці та ZMODIFICATIONDATEстовпець. Ось суть справи: ZMODIFICATIONDATEСтовпець має перелічений тип TIMESTAMPі містить номери з плаваючою комою.

Я переглянув документи sqlite і виявив це:

У SQLite немає класу зберігання, призначеного для зберігання дат та / або разів. Натомість вбудовані функції дати та часу SQLite здатні зберігати дати та часи як значення TEXT, REAL або INTEGER:

  • ТЕКСТ як рядки ISO8601 ("РРРР-ММ-DD HH: MM: SS.SSS").
  • РЕАЛЬНІ, як номери Джуліана, кількість днів з полудня в Ґрінвічі 24 листопада 4714 р. До н.е. згідно з пролептичним григоріанським календарем.
  • INTEGER як Unix Time, кількість секунд з 1970-01-01 00:00:00 UTC.

Програми можуть вибирати дати та час у будь-якому з цих форматів та вільно конвертувати між форматами, використовуючи вбудовані функції дати та часу.

Тож я спробував використати вбудовану datetimeфункцію з простою, SELECT datetime(ZMODIFICATIONDATE) FROM ZNOTE;але такою, що дала значення дурниць, як 1171380-13689427-18 21:08:40для запису, який я знаю, відповідає 2014-08-12. Збережене значення, про яке йдеться, було 429559087.38102.

Отже, хтось знає, який формат тут використовується? Або, що ще важливіше, як перетворити його на читабельну дату?

Наступні збережені дати відповідають усім (різні пункти) 2014-08-11, для того, щоб вони були найдавнішими.

  • 429435093.400244
  • 429446655.298724
  • 429447111.140259
  • 429460783.273032
  • 429464301.184442

(Я не був впевнений, де це розмістити, але оскільки здається, що це може бути саме Apple, це здавалося найкращим місцем.)

Відповіді:


4

Відповідно до цієї відповіді щодо переповнення стека, це часова мітка Unix, скоригована на 31 рік. Це характерно для CoreData, Apple ORM. Працює таке:

select datetime(zmodificationdate,'unixepoch','31 years') from znote

Для інших, які приїжджають сюди, шукають поради щодо тлумачення дат, що зберігаються в sqlite додатками для iOS: деякі додатки (тупо) зберігають часові позначки як місцевий час, а не UTC; у цьому випадку вам потрібно додати 'localtime'параметр до цього datetimeдзвінка, наприклад datetime(foo, 'unixepoch', '31 years', 'localtime')- особливо складний для користувачів у Великобританії (скажімо), де localtime == UTC протягом півроку, але не другої половини!
gimboland
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.