自1970-01-01 00:00以來,我的時間爲毫秒。 如何將它轉換爲UTCTime(整數 - > UTCTime)? 我需要UTCTime在MongoDB中插入它。Haskell將時間毫秒轉換爲UTCTime
謝謝!
自1970-01-01 00:00以來,我的時間爲毫秒。 如何將它轉換爲UTCTime(整數 - > UTCTime)? 我需要UTCTime在MongoDB中插入它。Haskell將時間毫秒轉換爲UTCTime
謝謝!
您可以使用該功能posixSecondsToUTCTime
在Data.Time.Clock.POSIX。由於您的值以毫秒爲單位,因此您需要先將其除以1000。這裏有一個例子:
import Data.Time.Clock.POSIX
import Data.Time.Clock.UTC
millisToUTC :: Integer -> UTCTime
millisToUTC t = posixSecondsToUTCTime $ (fromInteger t)/1000
下面是如何創建一個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)
你試過了嗎?你的代碼在哪裏出錯? –