有没有一个用于日期的Haskell库?

13

在Haskell中,是否有一个函数可以让我输入日期的组成部分(比如字符串表示或年月日组件),以便获取信息(比如星期几、一个月中的天数等)?

我在网上搜索过,看起来有很多自定义库,但我希望能在ghci 10.6.4的标准预加载库中找到一个函数,只是它没有被很好地记录下来。


我仍然找不到一个函数:**dayOfWeek :: SomeDateType -> WeekDayType**。 - recursion.ninja
dayOfWeek(fromGregorian 2014 7 15){-计算结果为星期二-} - recursion.ninja
3个回答

8

你是否认为Data.Time.CalendarData.Time.Format时间库中已经足够了?

你可以使用gregorianMonthLength解析日期的字符串表示,并获取月份的长度。不过,对于一周中的某一天,我不确定,但你可以使用只显示星期几的格式将日期格式化为字符串。


我看过日历,但我觉得我没有仔细研究它的格式,这个格式似乎包含了我需要的大部分信息 :) 谢谢! - Fry
(显然是Haskell的新手):我正在使用GHC。我找不到任何关于时间模块的信息。在谷歌上搜索也没有找到它所在的位置。我很困惑。这个模块是标准GHCI分发的一部分吗?如果是,那么这个模块会在哪里?如果不是,我应该从哪里获取这个模块?谢谢。 - Kevin Won
这是我找到的最好的,但是这个库还需要一些改进。请看我的评论和原帖问题。 - recursion.ninja

2
快速搜索谷歌可以找到这个网址,可能是你想要的。它可以让你解析表示日期的字符串并从中提取信息。

我希望能在标准库中找到一些东西,这样我就不必确保最终用户拥有特定的外部库 :) - Fry
2
你的最终用户是什么类型?Haskell库不像Python/Perl/Ruby那样具有非常晚的绑定,因此如果你编译你的代码,你应该得到一个坚实的a.out。 - Jonke

1
您可以使用Data.Time.Calendar.OrdinalDate中的mondayStartWeeksundayStartWeek来查找一周的日期,具体取决于您认为一周是从星期一开始还是从星期日开始。请注意,两个函数都需要保留HTML标记。
λ> snd $ mondayStartWeek $ fromGregorian 2017 10 3
2

在上面的例子中,返回值是2,表示星期二。由于函数名为mondayStartWeek,因此星期一是第一天,所以2对应于星期二。这适用于2017年10月3日。

关于周数的警告

两个函数都返回一个元组,其中第二个元素是星期几。据我所知,这应该是可信的。
然而,第一个元素是一年中的周数。请小心处理,因为周数编号的规则是政治性的。如果我没记错,在美国,第1周是包含1月1日的那一周。但在我生活的丹麦不是这样的。在这里,第1周是新年的第一个星期四所在的那一周。这意味着12月31日有时可能会落在下一年的第1周。我IRC,这是许多其他欧洲国家的规定。有些年份,美国和欧洲的周数会对齐,但有些年份则不会。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接