Haskell:从 POSIXTime/NominalDiffTime 中提取 Int

标签 haskell type-conversion epoch

我正在签署网络请求,作为查询字符串的一部分,我需要包括oauth_timestamp=123456789 其中 123456789 是自 1970-01-01 00:00 UTC 以来的标称时间。

我一直在使用 POSIXTime 来表示它,这只是 NominalDiffTime 的类型别名。

当我想将 POSIXTime/NominalDiffTime 转换为 Text 以便可以将其添加到查询字符串项集合中时,我遇到了问题。

问题源于 NominalDiffTime 的构造函数是私有(private)的,因此我无法提取实际数字。

即使是使用 show 的骇人听闻的方式也会附加一个“s”生成 123456789s

有没有从 NominalDiffTime 中提取实际数字的简单方法?

最佳答案

这可能是类型类使 API 比它们必须的更深奥的例子:NominalDiffTime实现 RealFrac ,任意精度分数的类型类。因此,floor您可以使用以下功能:

λ> import Data.Time.Clock.POSIX
λ> pt <- getPOSIXTime
λ> pt
1458787669.804632s
λ> toRational pt
182348458725579 % 125000
λ> floor pt :: Int
1458787669

关于Haskell:从 POSIXTime/NominalDiffTime 中提取 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191584/

相关文章:

haskell - 异步代码在 haskell 中运行速度比同步版本慢

haskell - 使用 State Monad 插入树

list - 生成其他列表中的差距列表。输入错误阻止我,

haskell - 为 newtype 定义构造函数

python - python 中的 time.mktime 时区是否免费?

json - 大纪元时间(自 1970 年开始计时)- Mac 与 Windows

haskell - Haskell 中 Word8 和 Word16 之间的转换

javascript - 从选中的单选按钮传递整数数组而不是数字字符串

sql - 为什么 Clng 在这些场景中的工作方式不同,并且可以在 SQL Server 中重现吗? (不是银行家四舍五入)

Oracle:到日期/时间的纪元毫秒,包括时区