2010-01-10 84 views
13

¿Existe una función en haskell que me permita ingresar el componente de una fecha (como una representación de cadena o componentes de un mes por año) de la que puedo obtener información (como día de la semana, días en un mes, etc.)?¿Hay una función haskell para las fechas?

He buscado en línea y parece que hay muchas bibliotecas personalizadas, pero espero que exista una en la biblioteca de preludio estándar de ghci 10.6.4 que no esté bien documentada.

Gracias por cualquier información :)

+0

Todavía no puedo encontrar una función: ** 'dayOfWeek :: SomeDateType -> WeekDayType' **. –

+0

Ejemplo: 'dayOfWeek (fromGregorian 2014 7 15) {- evals to Tuesday -}' –

Respuesta

8

¿Son Data.Time.Calendar y Data.Time.Format en el time library suficiente?

Puede analizar una representación de cadena de una fecha y obtener la longitud de un mes con gregorianMonthLength. No estoy seguro sobre el día de la semana, aunque puede formatear la fecha como una cadena usando un formato que solo muestra el día de la semana.

+0

Había visto el calendario, pero creo que no había buscado en el formato que parece tener la mayor parte de la información que necesitaría :) ¡Gracias! – Fry

+0

(... noob obviamente nuevo en haskell): estoy usando GHC. No puedo encontrar el módulo por tiempo en ninguna parte de mi máquina. buscar en Google no me da ningún golpe por un lugar donde vive. Estoy confundido. ¿Es eso parte de GHCI dist estándar y, de ser así, dónde diablos estaría ese módulo? Si no, ¿dónde puedo obtener el módulo? thx –

+0

Lo mejor que encontré, pero la biblioteca podría usar algunas mejoras. Vea mis comentarios sobre la pregunta del OP. –

2

Una rápida búsqueda en Google se convierte en imagen this, que puede ser lo que quiera. Le permite analizar cadenas que representan fechas y extraer información de ellas.

+0

Tenía la esperanza de encontrar algo en la biblioteca estándar, así no tendría que asegurar que el usuario final tuviera bibliotecas externas específicas :) – Fry

+2

Qué tipo del usuario final ¿tienes? una biblioteca Haskell no es algo así como python/perl/ruby ​​vinculante muy tarde así que si compilas tu código deberías tener un sólido a.out – Jonke

0

Puede encontrar el día de la semana con mondayStartWeek o sundayStartWeek, dependiendo de si cree que una semana comienza el lunes o el domingo. Ambas funciones están en Data.Time.Calendar.OrdinalDate.

λ> snd $ mondayStartWeek $ fromGregorian 2017 10 3 
2 

En el ejemplo anterior, el valor de retorno es 2, lo que indica el segundo día de la semana. Como la función se llama mondayStartWeek, el lunes es el primer día, por lo que 2 corresponde al martes. Esto es cierto, de 3 de octubre de 2017.

Una advertencia con respecto a los números de semana

Ambas funciones devuelven una tupla, en el que el segundo elemento es el día de la semana. Por lo que puedo decir, eso debería ser confiable.

El primer elemento, sin embargo, es el número de semana del año. Tenga cuidado con eso, porque las reglas para la numeración semanal son políticas. Si mal no recuerdo, en Estados Unidos, la semana 1 es la semana que contiene el 1 de enero. Ese no es el caso en Dinamarca, donde vivo. Aquí, la semana 1 es la primera semana en la que el jueves cae en el nuevo año. Esto puede significar que el 31 de diciembre puede caer en la semana 1 del próximo año. IIRC, esta es la regla para muchos otros países europeos. Algunos años, los números de semana americanos y europeos se alinean, pero algunos años, no.

Cuestiones relacionadas