我已经尝试了几种可以在网上找到的方法来将当前时间打印为ISO8601字符串,但是没有一种方法有效:
- This SO answer假设您已经知道如何获取当前时间,但我无法理解。
我不断得到一个错误Could not find module ‘System.Locale’
,因为它似乎System.Locale
是deprecated/not installed by default anymore?
我试着安装old-local
,但它给了我新的错误,我想是由于time
和old-locale
之间的不兼容造成的:
• Couldn't match expected type ‘time-1.9.3:Data.Time.Format.Locale.TimeLocale’
with actual type ‘System.Locale.TimeLocale’
NB: ‘time-1.9.3:Data.Time.Format.Locale.TimeLocale’
is defined in ‘Data.Time.Format.Locale’ in package ‘time-1.9.3’
‘System.Locale.TimeLocale’
is defined in ‘System.Locale’ in package ‘old-locale-1.0.0.7’
• In the first argument of ‘formatTime’, namely ‘defaultTimeLocale’
In the expression: formatTime defaultTimeLocale "%FT%T%QZ"
In an equation for ‘iso8601’:
iso8601 = formatTime defaultTimeLocale "%FT%T%QZ"
|
49 | iso8601 = formatTime defaultTimeLocale "%FT%T%QZ"
| ^^^^^^^^^^^^^^^^^
- This wiki page获取当前时间,但不将其格式化为ISO8601。
- this blog post看起来真的很好,但是只有一个关于格式的部分,实际上和1.:
Prelude Data.Time> formatTime defaultTimeLocale "%T, %F (%Z)" myTime
我想要的,是能够调用一个函数,让它打印出当前时间作为一个ISO8601字符串。我猜这将不得不实际上是一个IO操作,因为它不是一个严格的函数。
4条答案
按热度按时间u91tlkcl1#
我想知道time包的Data.Time.Format.ISO8601模块中的一些东西是否会有帮助?
iso8601Show
函数将UTCTime转换为ISO8601格式的字符串。和在GHCI中:
b1uwtaje2#
您可以通过执行函子Map来稍微改善这一点:
deyfvvtc3#
我想我知道了。注意Haskell有funky string formatting time specifications
%F
==年-月-日%T
==时:分:秒%Q
==.最多12位小数(秒的小数部分)你可以使用在线的
ghci
here复制粘贴代码,它应该都工作。eeq64g8w4#
UTC的
show
示例是您需要的,因此您可以使用show。只需注意:据我所知,ISO8601不是
yyyy-MM-dd hh:mm:ss
而是yyyy-MM-ddThh:mm:ss
,所以如果你是根据这个标准来实现的,请检查两次。