date - 如何在 Haskell 中将日期转换为 Int

标签 date haskell

我在将下面这些函数的输出转换为 Int 时遇到了一些问题

date :: IO (Integer,Int,Int)
date = getCurrentTime >>= return . toGregorian . utctDay

date' :: IO Integer
date' = getCurrentTime >>= return . toModifiedJulianDay . utctDay

基本上我想从其中之一获取输出(只要可能就不会大惊小怪)并将其转换为 int 。例如今天是 20/4/2011,因此 date 将为 (2011,4,20)date' 将为 55671.

在理想的世界中,我想要几个函数来扁平化这些 IO 函数以给出 Int – (2011,4,20)2011420 55671(当前为 IO Integer 类型)到 55671 作为 Int

如果有更好的方法来完成此操作,请告诉我!

编辑:抱歉,如果不清楚,我的意思是如何转换日期 (2011,4,20 )::IO (Integer,Int,Int)20110420::Int

最佳答案

你知道如何从一元上下文返回值吗?

如果您有以下类型的函数:

 date :: IO Integer
 date = getCurrentTime >>= return . toModifiedJulianDay . utctDay

您可以从 IO monad 中的任何其他函数使用它。就像这样:

 main = do
     n <- date
     print n

其中n的类型为Integer。要(不安全地)将 Integer 转换为 Int,请使用 fromIntegral

要将 IO Integer 函数实际转换为 IO Int 函数,请映射 fromIntegral,如下所示:

 date :: IO Integer
 date = getCurrentTime >>= return . fromIntegral . toModifiedJulianDay . utctDay

关于date - 如何在 Haskell 中将日期转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735544/

相关文章:

python - 连接/连接/合并两个缺失一列的数据框

java - 数据截断: Incorrect datetime value: '

php - 如何在 PHP 中使用 date_default_timezone_set() 函数和 +1 天的日期

java - GWT中的Util和sql日期转换,

haskell - 使用特定类定义类型同义词

haskell - 为什么 Haskell 让我返回一个空列表,其中列表中的列表是预期的?

haskell - Haskell 中的字符串入门

java - 如何找到两个日期之间的天数?

haskell - 在haskell中将Char转换为Int

无限列表的 Haskell 笛卡尔积