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

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

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

Ответы

Ответ 1

Являются Data.Time.Calendar и Data.Time.Format в время библиотеки достаточно?

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

Ответ 2

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

Ответ 3

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

λ> snd $ mondayStartWeek $ fromGregorian 2017 10 3
2

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

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

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

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