Quale formato utilizza la data db sqlite della mela?

1

Voglio estrarre i testi delle note e le date di modifica da un database delle note SQLite estratto da un backup del dispositivo iOS. Ma non riesco a capire come convertire il formato della data in una stringa di data leggibile.

Come ho ottenuto i dati

Ho scoperto il file con i dati della nota da questo pagina .

Porzione pertinente:

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 

Ciò che ho provato fino ad ora

Ho aperto il file e ho confermato che contiene il testo del corpo delle note previsto al suo interno. Il corpo del testo si trova all'interno di una tabella denominata ZNOTEBODY . Un'altra tabella denominata ZNOTE ha una colonna ZBODY che sembra contenere indici nella tabella ZNOTEBODY e una colonna ZMODIFICATIONDATE . Ecco il nocciolo della questione: la colonna ZMODIFICATIONDATE ha un tipo elencato di TIMESTAMP e contiene numeri in virgola mobile.

Ho esaminato i sqlite docs e ho trovato questo:

SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:

  • TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
  • REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
  • INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.

Applications can chose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions.

Quindi ho provato a utilizzare la funzione datetime incorporata con un SELECT datetime(ZMODIFICATIONDATE) FROM ZNOTE; semplice ma che ha prodotto valori senza senso come 1171380-13689427-18 21:08:40 per una voce che conosco corrisponde al 2014-08-12. Il valore memorizzato in questione era 429559087.38102 .

Quindi qualcuno sa quale formato viene usato qui? O, ancora più importante, come convertirlo in una data leggibile?

Le seguenti date memorizzate corrispondono tutte a (diversi punti) 2014-08-11, in ordine dal più recente al più recente.

  • 429435093.400244
  • 429446655.298724
  • 429447111.140259
  • 429460783.273032
  • 429464301.184442

(Non ero sicuro di dove postare questo, ma poiché sembra che potrebbe essere specifico di Apple, questo mi è sembrato il posto migliore.)

    
posta Ryan1729 29.06.2017 - 21:28
fonte

1 risposta

3

Secondo questa risposta su Stack Overflow, è un timestamp Unix corretto di 31 anni. Questo è tipico di CoreData, il framework ORM di Apple. Quello che segue funzionerebbe:

select datetime(zmodificationdate,'unixepoch','31 years') from znote
    
risposta data 29.06.2017 - 21:49
fonte

Leggi altre domande sui tag