Sqlite epoch datetime转换

时间:2014-02-17 07:12:14

标签: c# sqlite

所以我试图从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();
    }

但它正在屈服:10/11/2013 6:34:37 AM

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

编辑: 模式

SQLite schema

1 个答案:

答案 0 :(得分: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