作者:香福武燕_205 | 来源:互联网 | 2023-01-30 15:25
假设我有一个表示大纪元时间的整数,例如epoch = 1499055085
,我想将其转换为UTCTime
Haskell。我怎样才能做到这一点?
在其他语言中,这是一项非常琐碎的任务,为什么在haskell中如此困难?
1> Willem Van O..:
谁说很难?
您可以简单地使用fromIntegral :: (Integral a, Num b) => a -> b
将纪元(整数)转换为POSIXTime
。
接下来,我们可以使用posixSecondsToUTCTime :: POSIXTime -> UTCTime
获取UTCTime
,最后使用utctDay :: UTCTime -> Day
来获取的天部分UTCTime
。
如果您想要一个(年,月,日)元组,则可以使用该toGregorian :: Day -> (Integer,Int,Int)
方法。
因此我们可以使用以下方法:
import Data.Time.Calendar(toGregorian)
import Data.Time.Clock(utctDay,UTCTime)
import Data.Time.Clock.POSIX(posixSecondsToUTCTime)
epochToUTC :: Integral a => a -> UTCTime
epochToUTC = posixSecondsToUTCTime . fromIntegral
epochToGregorian :: Integral a => a -> (Integer,Int,Int)
epochToGregorian = toGregorian . utctDay . epochToUTC
然后例如:
Main> epochToGregorian 1234567
(1970,1,15)
Main> epochToGregorian 123456789
(1973,11,29)
Main> epochToGregorian 1234567890
(2009,2,13)
这很困难,因为我必须导入3个模块并确切知道每个模块包含什么,对于像我这样的新手来说,这很麻烦。