创建日期的最短方式

时间:2015-07-11 20:18:56

标签: haskell

我正在建立一个特定格式的日期,从年,月和日开始:

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,但我不确定是否有类似的内容。

1 个答案:

答案 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)