【问题标题】:Storing my dates as long (milliseconds) in SQLite: Can I use strftime(...)?在 SQLite 中存储我的日期很长(毫秒):我可以使用 strftime(...) 吗?
【发布时间】:2014-10-03 16:22:25
【问题描述】:

我将我的日期存储在 SQLite 中数据类型为 INTEGER 的列中。我正在存储自 1970 年以来的毫秒数。

例如:

  date (long)       other columns ...
  -----------------------------------------
   1407297600000       ...
   1407211200000       ...
   1407124800000       ...

我的问题是:在这种情况下如何使用 strftime()?
如果不是,我应该使用 TEXT 作为列类型??

运行这个:

 select strftime('%Y-%m', date) from my_table;

在扔无意义的东西:

  strftime('%Y-%m', date)
  -----------------------------------------
   1968-19
   1968-19
   1968-19

【问题讨论】:

    标签: sqlite strftime


    【解决方案1】:

    除非你另有说明,否则strftime() 认为这些数字是儒略日值 - 与 Unix 纪元毫秒非常不同。

    您需要转换为秒,并告诉 strftime() 这些是 Unix 纪元数:

    select strftime('%Y-%m', date / 1000, 'unixepoch');
    

    请参阅SQLite Date and Time Functions 文档中的修饰符部分。

    【讨论】:

    • 如果我还能及时重新设计架构,你会用什么来存储日期?最佳做法是什么?你会存储秒数而不是毫秒数吗?
    • 这真的取决于您的应用程序。如果您选择的语言/应用程序/库喜欢 Epoch 毫秒,并且转换成本低廉,那没问题。
    • 转换便宜吗?在这种情况下,转换只是 date/1000
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2018-08-05
    • 1970-01-01
    • 2014-10-12
    • 2014-08-18
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多