【问题标题】:Formatting date from INTEGER field in SqLite database (iTunes backup)从 SqLite 数据库中的 INTEGER 字段格式化日期(iTunes 备份)
【发布时间】:2013-11-01 02:41:31
【问题描述】:

我正在使用 SQLite Maestro 查看我昨天的 iPhone 备份文件,日期字段显示 INTEGER 数字 - 例如我最后一条短信的日期显示为 404076049。如何将其转换为可读的日期时间? 我在某处找到了一个示例SELECT strftime("%m-%d-%Y", date_col, 'unixepoch') AS date_col,但是将上述数字转换为 12-31-1982,这绝对是错误的(日期应该是昨天的某个时间)

有什么想法吗?

【问题讨论】:

    标签: ios sql sqlite itunes


    【解决方案1】:

    Mac 使用与 UNIX 纪元时间不同的“纪元时间”。

    UNIX 纪元日期是 1970 年 1 月 1 日午夜 UTC(又名格林威治标准时间)

    Mac OS 纪元日期是 2001 年 1 月 1 日午夜 UTC。

    我不知道如何使用 SQL 语句将日期从整数格式转换为日期字符串,但我知道如何使用 Cocoa:

    NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate: intValue];
    

    您应该能够计算 2 个日期系统之间的差异并将其用作转换因子:

    NSDate *date = [NSDate date];
    NSTimeInterval secondsSince2001 = [date timeIntervalSinceReferenceDate];
    NSTimeInterval secondsSince1970 = [date timeIntervalSince1970];
    long int difference = trunc(secondsSince2001 - secondsSince1970);
    

    然后,您可以在您的选择语句中使用整数值之前添加“差异”。

    【讨论】:

    • 但是你给了我一个想法——这两个 epoh 日期之间的差异是 978,307,200 秒。因此,我可以将其添加到我的 INT 日期:SELECT strftime("%m-%d-%Y", date + 978307200, 'unixepoch') AS date_1。我正在检查你的答案,谢谢!
    • Andrey 的 SQL 对我来说效果很好 - 我正在从我的 iphone 备份中获取的文本消息历史记录中构建消息日志。 iPhone 不显示每条消息的实际时间戳是愚蠢的,但这种方法让我可以直接导出到具有准确时间的电子表格。
    • 我想在一行中全部完成,所以:sqlite3 -csv -header filename 'select message.handle_id, message.subject, message.text, strftime("%m-%d-%Y,%H:%M", message.date + 978307200, "unixepoch") as date_1, message.is_from_me, handle.rowid, handle.id from message, handle where message.handle_id = handle.rowid;'
    • 为 Mohave(和年/月/日)更新 Audrey 的 SQL:SELECT strftime("%Y-%m-%d", (date + 978307200000000000) / 1000000000, 'unixepoch') AS date_1 from message
    【解决方案2】:

    因此,根据 Audrey 的评论,在 SQL 中执行此操作(在 MacOS Mohave 中使用新的纳秒时间戳):

    SELECT strftime("%Y-%m-%d", (date / 1000000000) + 978307200, 'unixepoch')
      AS date_1 from message
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      相关资源
      最近更新 更多