13

虽然这本身不是一个编程问题,但它是相关的。

所以我试图弄清楚如何解析从 iPhone 备份的 SMS DB。我正在查看“消息”表,特别是“日期”字段。我注意到最近的消息使用不同的编号系统来指示日期/时间。我已将范围缩小到切换到 iMessage,因为我在 1318470904 发送了一条消息,并在 340164736 发送了回复。我知道这些消息的发送时间间隔不到一个小时,但它们表明 > 30年的差距。

有人知道如何使用这个较新的系统准确计算日期吗?它是使用不同的时代还是我需要做一些疯狂的数学?

编辑:最近的消息也受到影响。文本(绿色气泡)以正常设置的日期存储,通过 iMessage(蓝色气泡)的任何内容都以不同的日期表示形式存储。

4

8 回答 8

14

由于备份导出为 SQLite 数据库格式,以下是如何在 SQLite 中将数字转换为真实日期:

select
    datetime(date + strftime('%s', '2001-01-01 00:00:00'),
       'unixepoch', 'localtime') as date,
    *
from message
于 2014-09-15T02:12:02.917 回答
7

它是自 2001 年 1 月 1 日以来的秒数,而不是其他基于 1970 年 1 月 1 日的 Unix。因此,要将其转换为 Excel 时间,您的公式将是 =Cell/(60*60*24) + "1/1/2001"。

于 2012-06-06T19:01:59.010 回答
7

我不知道在给定两个版本的情况下如何获得正确的日期,但是当我今天这样做时,我注意到该date列不是标准的 unix 时间,而是一个较长的数字,最后似乎有九个零,例如444548608000000000. 这就是我为获得正确日期所做的事情:

select
    datetime(substr(date, 1, 9) + 978307200, 'unixepoch', 'localtime') as f_date,
    text
from message
于 2018-01-13T22:03:12.103 回答
2

Apple 使用 Mac 绝对时间 (MacTime)。这是从 2001 年 1 月 1 日开始计算的。您看到的另一个时间戳是 UnixTime。这从 1970 年 1 月 1 日开始。

你必须在 MacTime 上加上 31 年才能获得 UnixTime。这是一个 PHP 片段:

$macTime = $d['ZMESSAGEDATE']; // MacTime column (from Whatsapp)
$unixTime =  $macTime + 978307200;
echo date("Y-m-d H:i:s", $unixTime);

时差是使用这个网站计算的: https ://www.timeanddate.com/date/durationresult.html?d1=1&m1=1&y1=1970&d2=1&m2=1&y2=2001&h1=0&i1=0&s1=0&h2=0&i2=0&s2=0

于 2015-07-16T12:45:51.720 回答
0

可能还有另一个答案。

=Cell/(60*60*24) + "1/1/1970"

适用于我当前版本的 iPhone/iOS => 4.3.3

于 2013-06-26T04:30:55.843 回答
0

带有消息时间的公式:=Cell/(60*60*24) + "1/1/2001 7:00"

于 2014-02-18T15:47:30.443 回答
0

由于 mac 中的日期是从 2001 年而不是 1970 年计算的,因此我们必须在这个 mac 日期中添加一些额外的内容。

978307200000 相当于毫秒,直到 2001-01-01

还需要乘以 1000 才能转换为毫秒。

macDate * 1000 + 978307200000
于 2017-10-12T11:37:44.447 回答
-1

Bohemian♦ 是对的,但他的回答有一点错别字:

使用 %S(大写字母)而不是 %s,因为时间以 2001 年以来的秒数表示,而不是 1970 年!

来自https://www.sqlite.org/lang_datefunc.html的文档

%s      seconds since 1970-01-01
%S      seconds: 00-59

选择 datetime(date + strftime(' %S ', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') 作为日期,* 来自消息

于 2015-08-26T18:49:41.577 回答