
Tim Docker wrote:
*Main> fmap (fromSql.head.head) $ quickQuery c "select getdate()" [] :: IO Data.Time.Clock.UTCTime 2010-04-09 09:59:20.67 UTC *Main> fmap (fromSql.head.head) $ quickQuery c "select getdate()" [] :: IO Data.Time.LocalTime 2010-04-09 09:59:26.313 *Main> fmap (fromSql.head.head) $ quickQuery c "select getdate()" [] :: IO System.Time.CalendarTime *** Exception: Convertible: error converting source data SqlString "2010-04-09 09:59:37.460" of type SqlValue to type
That is to be expected. You are converting data from the underlying database that does not contain timezone information. Thus it is not possible to populate ctTZ in CalendarTime.
Data.Time.LocalTime.LocalTime.ZonedTime: Cannot parse using default format string "%Y-%m-%d %T%Q %z" *Main> fmap (fromSql.head.head) $ quickQuery c "select getdate()" [] :: IO System.Time.ClockTime *** Exception: Convertible: error converting source data SqlString "2010-04-09 09:59:49.940" of type SqlValue to type Integer: Cannot read source value as dest type
And here you don't have something in seconds-since-epoch format. What you have is an unzoned date and time. Therefore it makes sense that you can convert it to a LocalTime. It does not have enough information to make it into a CalendarTime because it lacks a zone. It also isn't in seconds-since-epoch format, which is what a ClockTime is. The conversions to UTCTime and LocalTime work because they do not require a timezone to be present in the input data. -- John