2015-07-11 1 views
2

Я строю дату в определенном формате, начиная с года, месяца и дня доступен:Кратчайший способ создать дату

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

Я бы сказал, что ваш код довольно чистый, и вам не нужно беспокоиться. Но если вы все еще заинтересованы, это несколько меньше, чем код:

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) 
Смежные вопросы