¿Qué formato usan las notas de Apple sqlite db date?

1

Quiero extraer los textos de las notas y las fechas de modificación de una base de datos de notas sqlite extraída de una copia de seguridad del dispositivo iOS. Pero no puedo averiguar cómo convertir el formato de fecha en una cadena de fecha legible.

Cómo obtuve los datos

Descubrí qué archivo tenía los datos de la nota de esto página .

Parte relevante:

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 

Lo que he intentado hasta ahora

Abrí el archivo y confirmé que tiene el texto del cuerpo de la nota dentro. El texto del cuerpo está dentro de una tabla llamada ZNOTEBODY . Otra tabla llamada ZNOTE tiene una columna a ZBODY que parece contener índices en la tabla ZNOTEBODY y una columna ZMODIFICATIONDATE . Aquí está el quid de la cuestión: la columna ZMODIFICATIONDATE tiene un tipo listado de TIMESTAMP y contiene números de punto flotante.

Miré los documentos de sqlite y encontré esto:

  

SQLite no tiene una clase de almacenamiento reservada para almacenar fechas y / o horas. En su lugar, las funciones incorporadas de fecha y hora de SQLite son capaces de almacenar fechas y horas como valores TEXT, REAL o INTEGER:

     
  • TEXTO como cadenas ISO8601 ("YYYY-MM-DD HH: MM: SS.SSS").
  •   
  • REAL como números de día juliano, el número de días desde el mediodía en Greenwich el 24 de noviembre de 4714 a. C. Según el calendario gregoriano proleptico.
  •   
  • INTEGER como tiempo de Unix, el número de segundos desde 1970-01-01 00:00:00 UTC.
  •   

Las aplicaciones pueden optar por almacenar fechas y horas en cualquiera de estos formatos y convertir libremente entre formatos utilizando las funciones de fecha y hora integradas.

Así que intenté usar la función datetime incorporada con un simple SELECT datetime(ZMODIFICATIONDATE) FROM ZNOTE; , pero eso produjo valores sin sentido como 1171380-13689427-18 21:08:40 para una entrada que conozco que corresponde al 2014-08-12. El valor almacenado en cuestión era 429559087.38102 .

Entonces, ¿alguien sabe qué formato se está utilizando aquí? O, lo que es más importante, ¿cómo convertirlo en una fecha legible?

Las siguientes fechas almacenadas corresponden a (diferentes puntos en) 2014-08-11, en orden de la más antigua a la última.

  • 429435093.400244
  • 429446655.298724
  • 429447111.140259
  • 429460783.273032
  • 429464301.184442

(No estaba seguro de dónde publicar esto, pero como parece que podría ser específico de Apple, este parece ser el mejor lugar).

    
pregunta Ryan1729 29.06.2017 - 21:28

1 respuesta

3

De acuerdo con esta respuesta en Stack Overflow, es una marca de tiempo Unix ajustada por 31 años. Esto es típico de CoreData, el marco ORM de Apple. Lo siguiente funcionaría:

select datetime(zmodificationdate,'unixepoch','31 years') from znote
    
respondido por el Glorfindel 29.06.2017 - 21:49

Lea otras preguntas en las etiquetas