Format tanggal di Obrolan pesan.db

7

Saya sedang berusaha meningkatkan iMessages skrip cadangan . /Users/Kyro/Library/Messages/chat.db punya meja message dengan semua pesan dan beberapa tanggal.

Adakah yang tahu format tanggalnya? Saya pertama kali memikirkan cap waktu (saya punya misalnya 408978598 ) tetapi date -r 408978598 mengembalikan tanggal pada tahun 1982.

Matthieu Riegler
sumber

Jawaban:

6

Saya menemukan bahwa pada High Sierra, saya perlu menggunakan transformasi tanggal yang berbeda. 8 ekstra 0 pada bidang tanggal versus bidang date_read adalah petunjuk:

datetime(message.date/1000000000 + strftime("%s", "2001-01-01") ,"unixepoch","localtime") 
jmaver
sumber
1
Ya, sekarang bidang nanodetik.
Mahmoud Al-Qudsi
1
Pada 2018, jawaban ini berfungsi seperti yang diharapkan.
Antonio Max
Pada 2019, jawaban ini berfungsi seperti yang diharapkan
LukeM
3

Untuk menambahkan jawaban bermanfaat @ Matthieu, berikut ini cara mengonversinya dalam SQLite:

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

Sebagai contoh:

select
  is_from_me,
  datetime(date + strftime('%s','2001-01-01'), 'unixepoch') as date_utc,
  text
from message;
pimlottc
sumber
Ini tidak bekerja untuk saya, semua tanggal memiliki tahun -1400
Andy Ray
1

menggunakan dengan baik coreUtils tanggal:

Saya menemukan apa yang saya cari:

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

Ini cap waktu dengan tanggal dasar 1 Januari 2001.

Matthieu Riegler
sumber
Untuk melihatnya di zona waktu lokal default Anda, hapus -u opsi dan tambahkan indikator zona waktu UTC ke string tanggal: $ gdate -d "2001-01-01Z + 408978598 seconds"
pimlottc
-1

Dalam skrip yang Anda maksud, Anda dapat mencapai cap waktu seperti: datetime (date + strftime ('% s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') sebagai tanggal dari pesan - untuk masuk dalam waktu setempat jika itu yang Anda cari.

Peter Kaminski
sumber