如何将 getZonedTime 的输出更改为 Haskell 中格式"Year-Month-Day"的字符串?



以下代码段中findCurrentTime1函数的输出为:2021-06-28 22:43:22.92841508 UTC。

如何将其转换为格式为";年月日;在哈斯克尔?

import Data.Time
import Data.Time.Clock
import Data.Time.Calendar

findCurrentTime1 = do
zt <- getZonedTime
print zt
main = do
findCurrentTime1

在这里,我试图将getZonedTime值转换为字符串。

我所尝试的编译失败了。

  1. zt=fmap show getZonedTime

  2. zt<-fmap显示getZonedTime

  3. (y,m,d(<>获取分区时间

  4. 以下代码片段。

zt <- getZonedTime
let timeFromString = readTime defaultTimeLocale "%d %b %Y %l:%M %p" zt :: UTCTime
print zt
  1. formatTime defaultTimeLocale"%Y-%m-%d";zt

  2. 我试着使用show并获取前10个字符,但我得到了一个编译错误。看见https://stackoverflow.com/a/68170959/1531728.

在输入`='时解析错误

所以,我把"="至"&lt-&";。最后,我又出现了一个编译错误。

zt <- getZonedTime
s1 <- show zt
s2 <- take 10 s1
print s2

您的formatTime片段看起来不错。例如:

import Data.Time
main :: IO ()
main = do zt <- getZonedTime
putStrLn (formatTime defaultTimeLocale "%Y-%m-%d" zt)

或者同样的事情,但命名字符串:

main = do zt <- getZonedTime
let s = formatTime defaultTimeLocale "%Y-%m-%d" zt
putStrLn s

另一种获取字符串的方法是(showGregorian . localDay . zonedTimeToLocalTime) zt。(或者show实际上做了与showGregorian相同的事情。(

我假设您想要本地日期——UTC日期应该是(showGregorian . utctDay . zonedTimeToUTC) zt

ghci中运行:

x <- getZonedTime -- x: ZonedTime
s = show x        -- s: String (Ex: "2021-06-28 20:15:15.937914201 -03")
take 10 s         -- "2021-06-28"

我不确定这是否是最好的解决方案,这只是一个解决方案。

我建议您尝试使用Haskell中的类型的基本知识,并尝试使用Hoogle。有了基础知识,你就可以创建你想要的一切。

  • 编辑#1

有效的Haskell脚本必须是:

module Main where
import Data.Time
main :: IO ()
main = do
x <- getZonedTime
let s = show x
print $ take 10 s

这建立在Daniel Farina的答案之上。

它获取Day类型的值并将其转换为字符串,将该Day值的前10个字符作为子字符串,打印存储为变量的子字符串,并通过上述变量返回子字符串。

我进行此修改是为了在后续操作中使用函数调用的结果。

import Data.Time
findCurrentTime3a = do
zt <- getZonedTime
let s1 = show zt
let s2 = take 10 s1
print s2
return s2
main = do
result <- findCurrentTime3a
print result

最新更新