在Yesod中使用UTCTime和SQLite

时间:2013-10-25 09:28:30

标签: sqlite haskell yesod

在Yesod的模型中使用UTCTime字段时,出现以下错误:

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

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

Myobject
    timestamp UTCTime default=CURRENT_TIME
    otherfield Text

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

我正在选择Myobject - 实体列表,如下所示:

myobjects <- selectList [] [Desc MyobjectTimestamp]

使用MyobjectOtherfield而不是MyobjectTimestamp也无济于事,这是有道理的,因为无论如何都会获取所有数据并进行封送处理。

有人提出类似的问题here,但答案对我没有帮助。

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

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

1 个答案:

答案 0 :(得分:5)

您存储了文本值"09:18:07",而它期望UTCTime值。您是否手动插入值?

来自getCurrentTime

Data.Time会返回IO UTCTime类型的值,因此您可以在GHCI中使用putStr getCurrentTime来获取有效的表示,或使用now <- liftIO getCurrentTime在你的功能。

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