Есть ли библиотека Haskell для дат?

Есть ли в Haskell функция, которая позволит мне вводить компонент даты (например, строковое представление или компоненты дня, месяца, года), из которого я могу получить информацию (например, день недели, дни в месяце и т. д.)?

Я посмотрел в Интернете, и похоже, что есть много пользовательских библиотек, но я надеюсь, что в стандартной библиотеке prelude ghci 10.6.4 есть одна, которая просто плохо документирована?


person Fry    schedule 10.01.2010    source источник
comment
Я все еще не могу найти функцию: dayOfWeek :: SomeDateType -> WeekDayType.   -  person recursion.ninja    schedule 16.07.2014
comment
Пример: dayOfWeek (fromGregorian 2014 7 15) {- evals to Tuesday -}   -  person recursion.ninja    schedule 16.07.2014


Ответы (3)


Data.Time.Calendar и Data.Time .Format в библиотеке времени< /а> достаточно?

Вы можете проанализировать строковое представление даты и получить продолжительность месяца, используя gregorianMonthLength. Не уверен насчет дня недели, хотя вы можете отформатировать дату как строку, используя формат, который просто отображает день недели.

person Dan Dyer    schedule 10.01.2010
comment
Я видел Календарь, но думаю, что не смотрел в формат, который, кажется, содержит большую часть информации, которая мне понадобится :) Спасибо! - person Fry; 10.01.2010
comment
(... нуб, очевидно, новичок в haskell): я использую GHC. Я не могу найти модуль для времени нигде на моей машине. поиск в гугле не дает мне никаких ссылок на место, где он живет. Я смущен. Является ли это частью стандартного дистрибутива GHCI, и если да, то где, черт возьми, должен быть этот модуль, если нет, то где я могу получить этот модуль? спасибо - person Kevin Won; 25.01.2010
comment
Лучшее, что я нашел, но библиотеке не помешали бы некоторые улучшения. Смотрите мои комментарии к вопросу ОП. - person recursion.ninja; 16.07.2014

Быстрый поиск в Google выдает это, что может быть тем, ты хочешь. Он позволяет анализировать строки, представляющие даты, и извлекать из них информацию.

person avpx    schedule 10.01.2010
comment
Я надеялся на что-то в стандартной библиотеке, поэтому мне не нужно было бы гарантировать, что у конечного пользователя будут специальные внешние библиотеки :) - person Fry; 10.01.2010
comment
Какой у вас конечный пользователь? библиотека Haskell не является чем-то вроде python/perl/ruby с очень поздним связыванием, поэтому, если вы компилируете свой код, вы должны один сплошной a.out - person Jonke; 10.01.2010

Вы можете найти день недели с помощью mondayStartWeek или sundayStartWeek, в зависимости от того, как вы думаете, начинается ли неделя в понедельник или в воскресенье. Обе функции находятся в Data.Time.Calendar.OrdinalDate.

λ> snd $ mondayStartWeek $ fromGregorian 2017 10 3
2

В приведенном выше примере возвращаемое значение равно 2, что указывает на второй день недели. Поскольку функция называется mondayStartWeek, первым днем ​​является понедельник, поэтому 2 соответствует вторнику. Это на 3 октября 2017 года.

Предупреждение о номерах недель

Обе функции возвращают кортеж, где вторым элементом является день недели. Насколько я могу судить, этому следует доверять.

Однако первым элементом является номер недели в году. Будьте осторожны с этим, потому что правила нумерации недель являются политическими. Если я правильно помню, в США первая неделя — это неделя, содержащая 1 января. В Дании, где я живу, это не так. Здесь неделя 1 — это первая неделя, на которую приходится четверг в новом году. Это может означать, что 31 декабря может приходиться на первую неделю следующего года. IIRC, это правило для многих других европейских стран. В некоторые годы американские и европейские недельные числа совпадают, а в некоторые - нет.

person Mark Seemann    schedule 03.10.2017