2015-10-14 174 views
1

自1970-01-01 00:00以来,我的时间为毫秒。 如何将它转换为UTCTime(整数 - > UTCTime)? 我需要UTCTime在MongoDB中插入它。Haskell将时间毫秒转换为UTCTime

谢谢!

+0

你试过了吗?你的代码在哪里出错? –

回答

1

您可以使用该功能posixSecondsToUTCTimeData.Time.Clock.POSIX。由于您的值以毫秒为单位,因此您需要先将其除以1000。这里有一个例子:

import Data.Time.Clock.POSIX 
import Data.Time.Clock.UTC 

millisToUTC :: Integer -> UTCTime 
millisToUTC t = posixSecondsToUTCTime $ (fromInteger t)/1000 
1

下面是如何创建一个UTCTime并添加若干秒到它:

import Data.Time.Calendar 
import Data.Time.Clock 

-- 1/1/1900 as a Day 
jan_1_1900_day = fromGregorian 1900 1 1 :: Day 

-- 1/1/1900 as a UTCTime 
jan_1_1900_time = UTCTime jan_1_1900_day 0 

secs = 86400+3600 -- number of seconds to add to 1/1/1900 
        -- = 1 day + 1 hour 

-- add some seconds to 1/1/1900 00:00:00 
myTime = addUTCTime (fromIntegral secs) jan_1_1900_time 

showTime t = (utctDay t, utctDayTime t) -- to see inside a UTCTime 

main = do 
    print $ showTime jan_1_1900_time 
    print $ showTime myTime 

输出是:

(1900-01-01,0s) 
(1900-01-02,3600s) 

的第一个参数addUTCTime是既有Num一个NominalDiffTime实例和Enum实例。

使用Num实例,fromIntegral x将创建x秒的NominalDiffTime。

使用Enum实例,toEnum x将创建x皮秒的NominalDiffTime。

所以,如果你想在你的时间是毫秒级的,你可以使用这个配方:

millis = (2*86400+3600)*1000 -- milliseconds to add = 2 days + 1 hour 

myTime' = addUTCTime (toEnum (millis*10^9)) jan_1_1900_time 

然后print $ showtime myTime'结果:

(1900-01-03,3600s)