5 votos

¿Qué formato usa el apple notes sqlite db date?

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

Cómo obtuve los datos

Descubrí qué archivo tenía los datos de la nota de esta 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

He abierto el archivo y he confirmado que tiene el texto del cuerpo de la nota esperada en su interior. El cuerpo del texto está dentro de una tabla llamada ZNOTEBODY . Otra tabla llamada ZNOTE tiene un ZBODY que parece contener índices en la columna ZNOTEBODY mesa, y una ZMODIFICATIONDATE columna. Aquí está el quid de la cuestión: El ZMODIFICATIONDATE tiene un tipo de lista de TIMESTAMP y contiene números de punto flotante.

Miré el sqlite docs y encontró esto:

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

  • TEXTO como cadenas ISO8601 ("YYYY-MM-DD HH:MM:SS.SSS").
  • REAL como los números de los días julianos, el número de días desde el mediodía en Greenwich el 24 de noviembre de 4714 A.C. según el proléptico calendario gregoriano.
  • INTEGRA como Unix Time, el número de segundos desde 1970-01-01 00:00:00 UTC.

Las aplicaciones pueden elegir almacenar las fechas y horas en cualquiera de estos formatos y convertir libremente entre los formatos utilizando las funciones de fecha y hora incorporadas.

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

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

Las siguientes fechas almacenadas corresponden todas a (diferentes puntos en) 2014-08-11, en orden de mayor a menor.

  • 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 parecía el mejor lugar.)

12voto

TN. Puntos 3450

De acuerdo con esta respuesta en el desbordamiento de la pila, es una marca de tiempo de 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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X