2014-01-30 85 views
1

看来这个新版本没有正确处理日期。请参阅以下意见:社区Sqlite不正确处理日期和日期时间

1)当使用如下:

_conn.Create<MyTable>(); 

我在MyTable的类有日期时间字段,然后,它是创造它作为BIGINT内列SQLite数据库。

2)如果我的BIGINT栏更改为日期时间 -to匹配MyTable的类的任何现有行的日期时间定义回读为01/01/0001

3)如果我试图保存日期值到该日期时间字段,比如,将其设置为DateTime.Today它保存为30-12-1899。不管你试图保存什么价值都没关系。它总是保存为30-12-1899

注意:我在Android上使用MVVMCross。

T.I.A.

回答

3

关于如何存储DateTime,SQLite-net代码中有一段很长的故事。

你可以阅读更多关于这一点,并找到大量的意见和链接https://github.com/MvvmCross/MvvmCross/issues/213

作为讨论的结果,新的SQLite端口使用StoreDateTimeAsTicks,因为它的默认设置。

鉴于人们对上述github问题主题的看法的重要性,我建议使用StoreDateTimeAsTicks设置。如果有错误(如你在3中建议的那样),那么我建议通过SQLite-net社区追逐这一点 - 包括关于你使用的平台和版本的细节。

如果要更改此设置,那么你可以通过在:

options.StoreDateTimeAsTicks = false 

到SQLite的工厂。

有关选项的详细信息,请参阅:https://github.com/MvvmCross/MvvmCross-SQLite/blob/master/Sqlite/Cirrious.MvvmCross.Community.Plugins.Sqlite/BaseClasses.cs#L27

+0

斯图尔特感谢您的答复。因此,如果我选择保持StoreDateTimeAsTicks不变,那么我的“日期”或“日期时间”属性应该放在我的“MyTable”C#类中,以及表列中应该使用哪种SQLite数据类型?再次感谢您的信息。我会检查出来的。 – Pap

+0

@Pap现在你可能已经知道了这一点,但是如果有其他人来看,那么只需将你的类的属性作为DateTime并且数据库中的列应该是bigint。有一件事要注意,我们遇到的是,因为存储的int是从DateTime.MinValue开始的tick,所以如果你想使用strftime()来获取sql的日期,你需要做一些调整,因为它会期待unix时代。 – 2014-03-04 12:12:16

+0

@Tom,我实际上已经发现设置StoreDateTimeAsTicks = false会有诀窍。我的C#属性保留DateTime,映射的SQLite列也保留DateTime。就个人而言,我不喜欢将DateTime属性映射到BIGINT列的想法。不过谢谢。 – Pap