2013-10-25 59 views
3

使用UTCTime使用SQLite虽然我在耶索德模型使用UTCTime场,我得到以下错误:在耶索德

PersistMarshalError "field timestamp: Expected UTCTime, received PersistText \"09:18:07\"" 

我使用SQLite来存储我的数据库。我的模型看起来如下:

Myobject 
    timestamp UTCTime default=CURRENT_TIME 
    otherfield Text 

请注意,该错误在使用和不使用默认值时都会发生。

我选择的Myobject -entities名单如下:

myobjects <- selectList [] [Desc MyobjectTimestamp] 

使用的MyobjectOtherfield代替MyobjectTimestamp也没有帮助,这是有道理的,因为所有的数据被取出,因此无论如何编组。

类似的问题已被要求here,但答案并没有帮助我。

在使用SQLite时,如何在Yesod中使用UTCTime

编辑: 错误中提到的PersistText \"09:18:07\"是字段默认的值。

回答

5

您存储了一个文本值"09:18:07",而它期望的是UTCTime值。你用手插入了数值吗?

getCurrentTimeData.Time返回IO UTCTime类型的值,那么您可以使用putStr getCurrentTime在GHCI得到有效表达,或者在你的函数中使用now <- liftIO getCurrentTime

编辑: 因为getCurrentTime返回一个时间戳,如:2013-10-25 10:16:32.1627238 UTC,在数据库中插入一个像这样的值应该可以解决错误。

+0

不,该值是作为默认值插入的。那我会在那里放置那个功能?我可以改变编组的方式吗? –

+0

至于默认值,我不知道。我所知道的是,时间戳中的值应该如下所示:'2013-10-25 10:16:32.1627238 UTC'被Yesod接受为UTCTime值。 你应该参考SQLite的文档来获得这样的时间戳。 – RobertDiep

+0

当我以该格式输入日期时,确实有效,谢谢!将它包含在你的答案中,如果没有人解释为什么默认不起作用,我会接受你的答案。 –