以下代码段中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值转换为字符串。
我所尝试的编译失败了。
zt=fmap show getZonedTime
zt<-fmap显示getZonedTime
(y,m,d(<>获取分区时间
以下代码片段。
zt <- getZonedTime
let timeFromString = readTime defaultTimeLocale "%d %b %Y %l:%M %p" zt :: UTCTime
print zt
formatTime defaultTimeLocale"%Y-%m-%d";zt
我试着使用show并获取前10个字符,但我得到了一个编译错误。看见https://stackoverflow.com/a/68170959/1531728.
在输入`='时解析错误
所以,我把"="至"<-&";。最后,我又出现了一个编译错误。
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