gpt4 book ai didi

haskell - 有没有更好的方法将 UTC 时间转换为大纪元时间?

转载 作者:行者123 更新时间:2023-12-02 11:58:58 25 4
gpt4 key购买 nike

我想将文件的修改时间设置为从 exif 数据获取的时间。

为了从 exif 获取时间,我发现:

Graphics.Exif.getTag :: Exif -> String -> IO (Maybe String)

要设置文件修改时间,我发现:

System.Posix.Files.setFileTimes :: FilePath -> EpochTime -> EpochTime -> IO ()

假设我确实在 Exif 中找到了时间,我需要将字符串转换为 EpochTime。

  • 通过 parseTime,我可以获得 UTCTime
  • 通过 utcTimeToPOSIXSeconds 我可以获得 POSIXTime
  • 通过 POSIXTime,我或多或少可以获得 EpochTime

要从 UTCTime 转换为 EpochTime,此类型检查,但我不是确保它是正确的:

fromIntegral . fromEnum . utcTimeToPOSIXSeconds $ etime

这是函数 getTime 的一部分,该函数将从 Exif 返回时间数据(如果存在),否则文件的修改时间:

getTime (path,stat) = do
let ftime = modificationTime $ stat
err (SomeException _) = return ftime
time <- liftIO $ handle err $ do
exif <- Exif.fromFile path
let getExifTime = MaybeT . liftIO . Exif.getTag exif
res <- runMaybeT $ do
tmp <- msum . map getExifTime $ [ "DateTimeOriginal","DateTimeDigitized", "DateTime" ]
MaybeT . return . parseTime defaultTimeLocale "%Y:%m:%d %H:%M:%S" $ tmp
case res of
Nothing -> return ftime
Just etime -> return . fromIntegral . fromEnum . utcTimeToPOSIXSeconds $ etime
return (path,time)

我的问题是

有没有更好/更简单的方法来转换时间? (可能使用不同的库)

最佳答案

您还可以使用Data.Convertible.convert(来自convertible包):

import Data.Convertible (convert)
import System.Posix.Types (EpochTime(..))
import Data.Time.Clock (UTCTime(..))

utcTimeToEpochTime :: UTCTime -> EpochTime
utcTimeToEpochTime = convert

关于haskell - 有没有更好的方法将 UTC 时间转换为大纪元时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com