gpt4 book ai didi

haskell - 将 Data.Time.UTCTime 与 ByteString 相互转换

转载 作者:行者123 更新时间:2023-12-02 03:56:46 26 4
gpt4 key购买 nike

假设我需要写/读 Data.Time.UTCTime以“%Y-%m-%d %H:%M:%S”格式多次往返文件。

在我看来,使用 Data.Time.formatTimeData.Time.parseTime转换 UTCTime往返String然后打包/解包 String往返ByteString , 会太慢,因为它涉及中间 String .但是写一个 ByteString UTCTime 的构建器/解析器|手工操作似乎重复了很多已经在 formatTime 中完成的工作和 parseTime .

我想我的问题是:是否有系统的方法来获取 t -> String 类型的函数?或 String -> t转换为 t -> ByteStringByteString -> t在不重复大量工作的情况下提高效率?

我完全是 Haskell 新手,所以如果问题很愚蠢,请原谅我。

最佳答案

不,没有一种通用的方法可以将 t -> String 类型的函数转换为 t -> ByteString 类型的函数。如果您还记得 ByteString 不仅仅是更快的 String,它可能会帮助您接受现实。它的级别比那低。 ByteString 是一个字节序列;除非您考虑编码,否则它没有任何意义。

所以你的选择是:

  1. 使用函数组合,如 phg 的回答:

    import Data.ByteString.Char8 as B

    timeToByteStr :: UTCTime -> ByteString
    timeToByteStr = B.pack . formatTime'

    parseBStrTime :: ByteString -> Maybe UTCTime
    parseBStrTime = parseTime' . B.unpack

    我在其中更正了函数名称。例如,我还使用了 parseTime' 而不是 parseTime,来省略您需要传入的格式字符串和 TimeLocale

    (还值得注意的是,Data.Text 通常是比 Data.ByteString.Char8 更好的选择。后者只有在您的 Chars 属于 Unicode 代码点 0-255。)

  2. 如果性能是个问题,并且这种转换被证明是瓶颈,请编写一个解析器/构建器。

  3. 只需使用 String

恕我直言,最后一个选项对于 Haskell 新手来说是一个被低估的选择。 String 在性能方面不是最理想的,但它不是魔鬼的产物。如果您刚刚开始使用 Haskell,为什么不让您的生活尽可能简单,直到并且除非您的代码变得太慢?

关于haskell - 将 Data.Time.UTCTime 与 ByteString 相互转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268148/

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