我正在建立一个特定格式的日期,从年,月和日开始:
import Data.Time
import Data.Time.Format
getDate :: Text -> Text -> Text -> String
getDate year month day = formatTime defaultTimeLocale "%B %d %Y" date
where date = buildTime defaultTimeLocale oldDate :: UTCTime
oldDate = zip "Ymd" $ map unpack [year, month, day]
无论如何我在这里做的事情看起来太长了(在我将值放入格式之前然后以另一种格式转换该格式之前)。有没有办法只进行一次转换?我查看了API,但我不确定是否有类似的内容。
答案 0 :(得分:1)
我会说你的代码很干净而且你不用担心。但如果您仍然感兴趣,这比您的代码要短一些:
import Data.Time.Format
import Data.Text (Text, unpack, pack)
import Data.Time.Calendar
getDate :: Text -> Text -> Text -> String
getDate year month day = formatTime defaultTimeLocale "%B %d %Y" (fromGregorian (toInt year) (toInt month) (toInt day))
where
toInt :: (Read a, Num a) => Text -> a
toInt = read . unpack
或者,如果您可以稍微更改界面,那么它可能会更短:
getDate2 :: Integer -> Int -> Int -> String
getDate2 year month day = formatTime defaultTimeLocale "%B %d %Y" (fromGregorian year month day)