【问题标题】:Sqlite epoch datetime conversionSqlite 纪元日期时间转换
【发布时间】:2014-02-17 07:12:14
【问题描述】:

所以我正在尝试从 sqlite 数据库转换纪元时间。我正在使用类型为 Timeswap 的时间列。

存储的值为:1383928265 (11/8/2013 11:31:05 AM)http://www.epochconverter.com/

SQL:

var sql = "SELECT session_id, xml, strftime('%s',stopped), strftime('%s',time), orig_title FROM processed";

结果:1​​19360752804800(10/13/1973 7:45:52 AM)

我的转换器:

    public static DateTime FromUnixTime(long unixTime)
    {
        var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
        return epoch.AddSeconds(unixTime).ToLocalTime();
    }

我对转换器做了一些调整:

    public static DateTime FromUnixTime(long unixTime)
    {
        var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
        var s = unixTime / 86400;
        return epoch.AddSeconds(s).ToLocalTime();
    }

但它正在产生:2013 年 10 月 11 日上午 6:34:37

我无法从 sqlite 数据库中获取正确的日期。

编辑: 架构

【问题讨论】:

  • 请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。
  • 所以你说你将纪元时间存储在数据库中,然后在 select 中调用 strftime 再次计算纪元?我认为您不应该在查询中使用 strftime。
  • 除了@Mateusz 评论,能不能给我们展示一下表格的方案?您将数据保存在什么类型的字段中?

标签: c# sqlite


【解决方案1】:

您使用 strftime 错误。 除非您使用 unixepoch 修饰符,否则数字将被解释为儒略日期:

> SELECT strftime('%s', 1383928265), datetime(1383928265);
119360535336000  3784354-44914542-14 12:00:00
> SELECT strftime('%s', 1383928265, 'unixepoch'), datetime(1383928265, 'unixepoch');
1383928265       2013-11-08 16:31:05

但是,数据库中的值已经具有您想要的确切格式,因此您首先不需要使用strftime

SELECT session_id, xml, stopped, time, orig_title FROM processed

【讨论】:

  • 您好,谢谢您的回复!我使用 strftime 的原因是因为当我在 C# 中运行查询字符串时,sqlite 连接器库告诉我“字符串未被识别为有效的 DateTime。”。所以我试图在没有完全理解它的功能的情况下使用 strftime。
猜你喜欢
  • 2017-06-22
  • 2018-04-24
  • 2011-12-06
  • 2012-09-06
  • 2019-02-04
  • 2012-11-08
  • 2019-01-15
  • 2019-11-14
  • 1970-01-01
相关资源
最近更新 更多