Datumsformat in der chat.db von Message

Ich arbeite daran, mein iMessages-Sicherungsskript zu verbessern . /Users/Kyro/Library/Messages/chat.dbhat eine Tabelle messagemit allen Nachrichten und einigen Daten.

Irgendeine Idee, was das Datumsformat ist? Ich habe zuerst an einen Zeitstempel gedacht (ich habe zum Beispiel 408978598), aber date -r 408978598ein Datum im Jahr 1982 zurückgegeben.

Antworten (4)

Ich habe festgestellt, dass ich ab High Sierra eine andere Datumstransformation verwenden musste. Die 8 zusätzlichen Nullen im Datumsfeld im Vergleich zum date_read-Feld waren der Hinweis:

datetime(message.date/1000000000 + strftime("%s", "2001-01-01") ,"unixepoch","localtime") 
Ja, es ist jetzt ein Nanosekundenfeld.
Ab 2018 funktioniert diese Antwort wie erwartet.
Ab 2019 funktioniert diese Antwort wie erwartet
Ab 2020 funktioniert diese Antwort wie erwartet.
Ab 2021 funktioniert diese Antwort wie erwartet. 🎉
Ab 2022 funktioniert diese Antwort wie erwartet.

Um die hilfreiche Antwort von @Matthieu zu ergänzen, können Sie sie wie folgt in SQLLite konvertieren:

datetime(date + strftime('%s','2001-01-01'), 'unixepoch')

Zum Beispiel:

select
  is_from_me,
  datetime(date + strftime('%s','2001-01-01'), 'unixepoch') as date_utc,
  text
from message;
Das funktioniert bei mir nicht, alle Daten haben das Jahr -1400

gut mit coreUtils date :

Ich habe gefunden, wonach ich gesucht habe:

$gdate -ud "2001-01-01 + 408978598 seconds" 
Tue Dec 17 13:09:58 UTC 2013

Es ist ein Zeitstempel mit dem Basisdatum 1. Januar 2001.

Um es in Ihrer lokalen Standardzeitzone anzuzeigen, lassen Sie die -uOption weg und fügen Sie den UTC-Zeitzonenindikator zur Datumszeichenfolge hinzu:$ gdate -d "2001-01-01Z + 408978598 seconds"

In dem Skript, auf das Sie sich beziehen, können Sie Zeitstempel wie folgt erreichen: datetime(date + strftime('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') als Datum aus der Nachricht - um in Ortszeit einzusteigen, wenn es das ist, wonach Sie suchen.