【发布时间】:2016-04-23 19:27:37
【问题描述】:
我是 haskell 的新手,想通过尝试一些真实世界的应用程序来学习 learninggin。其中一个组件是能够将 ISO 格式字符串中的日期解析到它的组件中。 This Stack Overflow post 帮助我开始了,但这还不够,我很困惑。
我有以下代码:
import System.Locale
import Data.Time
import Data.Time.Format
data IsoDate = IsoDate {
year :: Int
, month :: Int
, day :: Int
} deriving (Show)
parseIsoDate :: String -> IsoDate
parseIsoDate dateString =
IsoDate year month day
where
timeFromString = readTime defaultTimeLocale "%Y %m %d" dateString :: UTCTime
year = 2013
month = 10
day = 31
对于 2013 年的万圣节来说,这很好。我已经尝试将年份重写为:
year = formatTime defaultTimeLocale "%y" timeFromString
我知道会失败(不能用String 构造我的IsoDate 类型)。然后尝试将字符串读入 Int。
year = read (formatTime defaultTimeLocale "%y" timeFromString)
回复如下:
parseIsoDate "2012-12-23"
IsoDate {year = *** Exception: readsTime: bad input "2012-12-23"
还有一些其他的尝试可以让这个转换 - 但我发布的是最合理的尝试,o 我不会发布其他尝试。
我想弄清楚如何使用我当前的代码(因为我正在尝试学习结构),此外(因为日期解析是必不可少的)我想知道更好的方法(也许是最惯用的)在 Haskell 中处理这个。
【问题讨论】:
标签: date parsing datetime haskell