【问题标题】:SQLite timestamp exportSQLite 时间戳导出
【发布时间】:2019-02-15 08:37:00
【问题描述】:

我在 MacOS 上有一个带有时间戳数据的 SQLite 3 数据库(通常类似于 279020203.539467)。

documentation 表示日期可以存储为

REAL - as Julian day numbers, the number of days since noon in Greenwich
       on November 24, 4714 B.C. according to the proleptic Gregorian calendar.

看起来这就是我所拥有的。

我想将其导出并导入其他数据库。

我假设时间戳数据类型在数据库引擎之间不兼容,因此必须在某处进行一些转换,并且我假设最好在从 SQLite 数据库中导出数据时这样做。

但我不知道如何进行这种转换。

我查看了this answer,它指的是this forum post,这表明在 SQLite 中您可以执行类似的操作

select datetime('40660.9454658044', '+2415018 days', '+12 hours', 'localtime');

(也许 2415018 是公元前 4714 年 11 月 24 日与其他神奇日期之间的天数...)

但是,将本示例中的时间戳字符串替换为我所拥有的结果为 null。大概是因为 '279020203.539467' 是某种其他类型的时间戳。它也比示例大一些。

但是如何将其转换为可用日期?我知道应该在 2011/2012 年左右。

将数据解释为“整数”(自 1970-01-01 以来的秒数)给出 1978,因此这也不正确。

更新:我发现了

288773834.371606 should be 2010-02-25 07.57
296636121.950064 should be 2010-05-27 08.55

(如果重要,CET)。

【问题讨论】:

    标签: sqlite datetime export


    【解决方案1】:
    DATEDIF("2010-02-25 07.57"; "2010-05-27 08.55"; "d")
    

    这给出了 91 天,即 7862400 秒,几乎与两个时间戳之间的差值完全相同(296636121.950064 - 288773834.371606 = 7862287.578458)。

    在 MacOS 上,本机时间戳是从 2001 年 1 月 1 日(2001 年 1 月 1 日)开始的秒数。 和

    DATEDIF("2001-01-01 00:00"; "2010-02-25 07.57"; "d")
    

    给出 3342 天,即 288748800 秒,接近但不完全是时间戳,但差异是由

    • DATEDIF 只提供全天服务
    • CET 休息一小时

    为此,我们需要多加大约 25000 秒,这使我们几乎精确到 2010-02-25 07.57 的时间戳。

    因此,其要点是 MacOS 上的 SQLite 将时间戳存储为 MacOS 原生时间戳,即自 MacOS 纪元 (2001-01-01 00.00) 开始以来的秒数。这可能是由于创建数据的应用程序没有使用 SQLite 时间戳,而是使用 MacOS 原生日期并将它们作为任何其他数据存储在数据库中。

    将其转换为其他格式应该很简单,无论是在导出过程中、导出文件的转换过程中还是在导入过程中。

    可能最简单的方法是使用从原始数据库中转换导出日期

    select ...
        datetime(table.timestamp_field, 'unixepoch', '+31 years')
    from ...
    

    【讨论】:

      【解决方案2】:

      好消息是:要将儒略日期转换为“常规”日期格式,您可以使用 datetime(strftime('%J',jtime))。仅供参考Here's the doc 用于 sqlite 日期和时间功能。但是有个坏消息。

      A NASA Calculator 计算 2010 年 2 月 25 日的儒略日期为 2455246。它计算 288773834 的民事日期为公元 785907 年 9 月 2 日 sqlite 使用上述表示法没有给出相同的结果,但它没有不要给出“日期”。

      尽管这些数字看起来像儒略日期表示法,但它们并不是我们有生之年的任何日期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        • 2014-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-09
        相关资源
        最近更新 更多