在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\"
是字段默认的值。
答案 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
,所以在数据库中插入这样的值可以解决错误。