Data.Time

De Wikihaskell
Saltar a: navegación, buscar
Data.Time
Página del Grupo 6 del curso 2010/11
Lenguaje Haskell
Biblioteca Data.Time
Autores Calvente Aragón Roberto
Chaves Pérez Juan Manuel
Pérez Montero Miguel Ángel

Contenido

Introducción

¿Quién no ha tenido nunca que utilizar en un lenguaje de programación una dato de tipo fecha o de tipo tiempo? Con esta biblioteca queremos dar un breve resumen de todos los formatos disponibles para estos tipos de datos.
Reloj.jpg
Para empezar en esta biblioteca podrá conocer todos los tipos de calendario que existen en este lenguaje, así como las funciones para realizar las conversiones entre los diferentes calendarios.

Luego podrá ver una descripción de los tipos de datos y funciones utilizadas para trabajar con marcas de tiempos. Estas marcas de tiempos son muy utilizadas para ver la duración de ejecución de un determinado programa, para así poder medir rendimiento entre diferentes equipos o plataformas. En este apartado se podrá trabajar con la biblioteca POSIX tan utilizada en otros lenguajes de programación.

A continuación se enumerarán los diferentes formados que se pueden utilizar en UNIX para mostrar tipos de datos horarios y de fechas.

A parte de estar explicada cada una de las funciones y de los tipos de datos utilizados, existen ejemplos de uso, lo cual facilitará aún mas el trabajo con esta biblioteca.

Instalación

Para proceder a la instalación de esta biblioteca, es necesario anteriormente instalar la Biblioteca de empaquetamiento Cabal

Instalación de Cabal

Para instalar Cabal podemos seguir los pasos que vienen explicados en la biblioteca Data.Vector. Aquí viene bastante bien explicado para un sistema operativo Linux, pero si por el contrario queremos proceder a la instalación en Windows podemos seguir los pasos indicados en [aquí].

Instalación de Data.Time

Una vez hayamos instalado Cabal ya podemos proceder a intalar nuestra biblioteca Data.Time para poder hacer uso de todas los tipos y funciones que vienen con ella. Así si estamos en un SO Linux solo deberemos hacer lo siguiente en la consola del sistema:

   $ cabal install time

Cargar la biblioteca

Una vez estemos dentro del GHCi deberemos cargar la librería Data.Time para poder utilizarla.

    Prelude> :m + Data.Time

El prompt cambia a ser:

    Prelude Data.Time>

Data.Time.Calendar

Introducción. Conceptos. Tipos de calendario

Cuando hablamos de tipos de datos fecha y calendario, debemos tener presente los conceptos de calendario Gregoriano y Juliano. Hasta el siglo XVI, en la mayor parte de los países se empleaba de manera oficial el calendario Juliano instaurado por Julio Cesar en el año 46 a. C. Sin embargo, en el año 1582 el papa Gregorio XIII fué promotor del cambio del calendario Juliano al Gregoriano (el cual lleva su nombre debido a este papa). Dicho cambio fué originado por la inexactitud en la medición del número de días que se empleaba en el calendario Juliano, en el cual se consideraba que cada año contaba con 365,25 días, mientras que realmente era de 365,242189. Esta aparentemente minúscula diferencia, ocasionó con el transcurso de los años una diferencia de 10 días para la Pascua. Por ello, se optó por adaptar el calendario de forma que en la mayoría de países católicos pasaramos del jueves 4 de octubre de 1582 (calendario juliano) al 15 de octubre de 1582 (calendario gregoriano), desapareciendo 10 dias, los cuales habían sido contados de más en el calendario Juliano.

El calendario se adoptó inmediatamente en los países donde la Iglesia Católica tenía influencia. Sin embargo, en países que no seguían la doctrina católica, tales como los protestantes, anglicanos, ortodoxos, y otros, este calendario no se implantó hasta varios años (o siglos) después. A pesar de que en sus países el calendario gregoriano es el oficial, las iglesias ortodoxas (excepto la de Finlandia) siguen utilizando el calendario Juliano (o modificaciones de él diferentes al calendario Gregoriano). De ahí la necesidad en que en muchos lenguajes de programación contemos con tipos de datos en los cuales podamos distinguir entre estos calenarios.

Day

nuevoTipo Day La actualización de días Juliano es una cuenta estándar de días, siendo cero el día 17/11/1858.

addDays

addDays :: Integer -> Day -> Day

Añade una cantidad de días (primer argumento de tipo Integer) a una fecha de tipo Day, devolviendo un tipo Day con la suma de dias del primer argumento al segundo argumento.

Ejemplo:

Main> addDays 1 (fromGregorian 2010 11 30)
 2010-12-01

diffDays

Para obtener el número de dias que difieren de dos fechas podemos emplear la función diffDays

diffDays :: Day -> Day -> Integer

cuya definición es la siguiente:

diffDays :: Day -> Day -> Integer
diffDays (ModifiedJulianDay a) (ModifiedJulianDay b) = a – b

Calendario Gregoriano

Funciones para trabajar y operar con el calendario gregoriano


toGregorian

toGregorian :: Day -> (Integer, Int, Int)

Convierte un tipo Day al calendario gregoriano. El primer elemento es el año, el segundo el mes(1-12) y el tercero el día (1-31)


fromGregorian

fromGregorian :: Integer -> Int -> Int -> Day

Convierte desde el calendario gregoriano a un tipo Day. El primer elemento es el año, el segundo el mes (1-12), y el tercero es el día (1-31). Los valores erroneos se corregirán al rango correcto más apropiado en función del dato. Por ejemplo, si introducimos el 32 de Enero, el sistema interpretará como el 31 de Enero.


fromGregorianValid

fromGregorianValid :: Integer -> Int -> Int -> Day

Igual que la función anterior, pero ahora si algún valor es erroneo, entonces nos devolverá Nothing.


showGregorian

showGregorian :: Day -> String

Muestra un tipo Day en formato ISO 8601. Dicho formato es el siguiente (yyyy-mm-dd) ,donde yyyy corresponde al año, mm al mes y dd al día.


gregorianMonthLength

gregorianMonthLength :: Integer -> Int -> Int

El número de días en un mes determinado de acuerdo al calendario Gregoriano. El primer argumento es el año, el segundo es el mes.


addGregorianMothsClip

addGregorianMonthsClip :: Integer -> Day -> Day

Añade n meses (primer parámetro) a la fecha pasada como segundo parámetro, devolviendo la fecha en cuestión incrementada el número de meses (n), teniendo en cuenta que si sobrepasa al día en ese mes, devuelve el último día del mes.

Por ejemplo:

Main> addGregorianMonthsClip 1 (fromGregorian 2005 1 12)
 2005-02-12
Main> addGregorianMonthsClip 1 (fromGregorian 2005 1 30)
 2005-02-28


addGregorianMonthsRollOver

addGregorianMonthsRollOver :: Integer -> Day -> Day

Añade n meses (primer parámetro) a la fecha pasada como segundo parámetro. Al contrario de la función anterior, si nos sobrepasamos el número de días del mes, entonces devuelve la fecha relativa al siguiente mes.

Por ejemplo:

Main> addGregorianMonthsRollOver 1 (fromGregorian 2005 1 30)
 2005-03-02


addGregorianYearsClip

addGregorianYearsClip :: Integer -> Day -> Day

Añade n años (primer argumento) a la fecha en cuestión, localizando el mes y día correcto.

Por ejemplo:
Si le añadimos dos años a la fecha 29 de Febrero de 2004, entonces nos devolverá el 28 de Febrero de 2006, ya que 2006 no es  bisiesto y Febrero tiene sólo 28 días.


addGregorianYearsRollOver

addGregorianYearsRollOver :: Integer -> Day -> Day

Añade n años (primer argumento) a la fecha en cuestión (segundo argumento). Si se sobrepasa el número de días, entonces nos incorpora los del mes siguiente.

Por ejemplo:
Si le añadimos dos años a la fecha 29 de Febrero de 2004, entonces nos devolverá el 1 de Maarzo de 2006.


isLeapYear

isLeapYear :: Integer -> Bool

Nos indica si el año pasado como primer argumento es bisiesto o no, acorde con el calendario gregoriano.

Data.Time.Calendar.Easter

sundayAfter

sundayAfter :: Day -> Day

Devuelve la fecha relativa al siguiente domingo, de la fecha pasada como arguemento. Por ejemplo:

Main> sundayAfter (fromGregorian 2010 11 22)
 2010-11-28
Main> sundayAfter (fromGregorian 2010 11 29)
 2010-12-05

orthodoxPaschalMoon

orthodoxPaschalMoon :: Integer -> Day

Dado un año, nos muestra el día correspondiente a la luna de pascual acuerdo a la tradición cristiana ortodoxa.


orthodoxEaster

orthodoxEaster :: Integer -> Day

Dado un año, nos muestra el domingo de pascua acorde a la tradición cristina ortodoxa.


gregorianPaschalMoon

gregorianPaschalMoon :: Integer -> Day

Dado un año, nos muestra la luna de pascual acorde con el calendario gregoriano.


gregorianEaster

gregorianEaster :: Integer -> Day

Dado un año, nos muestra el día de pascua acorde con el calendario gregoriano.

Data.Time.Calendar.Julian

toJulianYearAndDay

toJulianYearAndDay :: Day -> (Integer, Int)

Convierte al formato de calendario Juliano un día y año. El primer elemento del par es un año (acorde al calendario Juliano), el según es el número del día del año, por ejemplo el 1 para el 1 de Enero hasta el 365 (o 366 en caso de años bisiestos) para el 31 de Diciembre.

Por ejemplo:

Main> toJulianYearAndDay (fromGregorian 2010 2 1)
 (2010,19)
Main> toJulianYearAndDay (fromGregorian 2010 1 1)
 (2009,353)

Curiosidad: En este último caso, observamos como el día 1 de Enero de 2010 para el calendario gregoriano, se corresponde con el día 353 del año 2009.


fromJulianYearAndDay

fromJulianYearAndDay :: Integer -> Int -> Day

Convierte desde el calendario Juliano al formato de día y año. Los días inválidos serán aproximados al rango correcto (desde el 1 hasta el 365 o 366)


fromJulianYearAndDayValid

fromJulianYearAndDayValid :: Integer -> Int -> Day

Igual que la función anterior, pero sí los dias son erróneos entonces no devolverá nada.


showJulianYearAndDay

showJulianYearAndDay :: Day -> String

Muestra el año y día Julianos en el formato (yyyy-ddd)


isJulianLeapYear

isJulianLeapYear :: Integer -> Bool

Indica si un año es bisiesto o no acorde con el calendario Juliano.


toJulian

toJulian :: Day -> (Integer, Int, Int)

Convierte desde un tipo Day a una fecha acorde con el calendario Juliano, donde el primer argumento es el año, el según el mes (1-12) y el tercero el día (1-31)


fromJulian

fromJulian :: Integer -> Int -> Int -> Day

Convierte desde el calendario Juliano al tipo Day, donde el primer argumento es el año, el según el mes (1-12) y el tercero el día (1-31). Los valores erroneos serán aproximados al rango correcto.


fromJulianValid

fromJulianValid :: Integer -> Int -> Int -> Day

Igual que el anterior, pero si los valores son erróneos entonces no nos devuelve nada.


showJulian

showJulian :: Day -> String

Muestra la fecha conforme al día Juliano en el formato ISO 8601(yyyy-mm-dd)


julianMonthLength

julianMonthLength :: Integer -> Int -> Int

Muestra el número de días dado un mes conforme al calendario Juliano. El primer argumento es el año y el segundo el mes.


addJulianMonthsClip

addJulianMonthsClip :: Integer -> Day -> Day

Añade n meses (primer parámetro) a la fecha pasada como segundo parámetro, devolviendo la fecha en cuestión incrementada el número de meses (n), teniendo en cuenta que si sobrepasa al día en ese mes, devuelve el último día del mes.

Por ejemplo:
Si añadimos un mes a la fecha 2005-01-30 nos devolverá el 2005-02-28 (el último día del mes de febrero).


addJulianMonthsRollOver

addJulianMonthsRollOver :: Integer -> Day -> Day

Añade n meses (primer parámetro) a la fecha pasada como segundo parámetro. Al contrario de la función anterior, si nos sobrepasamos el número de días del mes, entonces devuelve la fecha relativa al siguiente mes. Por ejemplo, si añadimos un mes a la fecha 2005-01-30, nos devolverá el 2 de Marzo de 2005


addJulianYearsClip

addJulianYearsClip :: Integer -> Day -> Day

Añade n años (primer argumento) a la fecha en cuestión, localizando el mes y día correcto.

Por ejemplo:
Si le añadimos dos años a la fecha 29 de Febrero de 2004, entonces nos devolverá el 28 de Febrero de 2006, ya que 2006 no es  bisiesto y Febrero tiene sólo 28 días.

addJulianYearsRollOver

addJulianYearsRollOver :: Integer -> Day -> Day

Añade n años (primer argumento) a la fecha en cuestión (segundo argumento). Si se sobrepasa el número de días, entonces nos incorpora los del mes siguiente.

Por ejemplo:
Si le añadimos dos años a la fecha 29 de Febrero de 2004, entonces nos devolverá el 1 de Maarzo de 2006.

Data.Time.Calendar.MonthDay

monthAndDayToDayOfYear

monthAndDayToDayOfYear :: Bool -> Int -> Int -> Int

Convierte el mes y el día en calendariso Gregoriano o Juliano al día del año. El primer argumento indica si el año es bisiesto o no.


monthAndDayToDayOfYearValid

monthAndDayToDayOfYearValid :: Bool -> Int -> Int -> Maybe Int Convierte el mes y el día en calendarios Gregoriano o Juliano al día del año. El primer argumento indica si el año es bisiesto o no.


dayOfYearToMonthAndDay

dayOfYearToMonthAndDay :: Bool -> Int -> (Int, Int)

Conviete desde un día del año en calendario Gregoriano o Juliano al mes y día. El primer arguemtno indica si el año es bisiesto.


monthLength

monthLength :: Bool -> Int -> Int

El número de días de un mes tanto en el calendario Gregoriano como en el Juliano. El primer arguemnto es un flag que indica si el año es bisiesto.

Data.Time.Calendar.OrdinalDate

toOrdinalDate

toOrdinalDate :: Day -> (Integer, Int)

Convierte al formato ISO 8601 una fecha dada como primer arguemtno. El primer elemento del par es el año (acorde con el calendario Gregoriano), mientras que el segundo es el día del año comprendido entre el 1 para el 1 de Enero y el 365 (o 366 en años bisiestos) para el 31 de Diciembre.


fromOrdinalDate

fromOrdinalDate :: Integer -> Int -> Day

Convierte desde el formato ISO 8601 a una tipo Day. Los días errores serán aproximados al rango correcto (desde el 1 al 365 o 366)


fromOrdinalDateValid

fromOrdinalDateValid :: Integer -> Int -> Maybe Day

Convierte desde el formato ISO 8601 a un tipo Day. En el caso de errores en el día, no devolverá nada.


showOrdinalDate

showOrdinalDate :: Day -> String

Muestra el tipo Day en el formato de fecha Ordinal ISO 8601(yyyy-ddd)


isLeapYear

isLeapYear :: Integer -> Bool Indica si un año es bisiesto o no, acorde con el calendario Gregoriano.


mondayStartWeek

mondayStartWeek :: Day -> (Int, Int) Obtiene el número de la semana de lunes a partir del año y el día de la semana. El primer lunes es el primer día de la semana 1, los días anteriores en el año son la semana 0 (como "% W" en Data.Time.Format.formatTime). El lunes es 1, el domingo es 7 ("% u" en Data.Time.Format.formatTime).


sundayStartWeek

sundayStartWeek :: Day -> (Int, Int) Obtiene el número de la semana de domingo a partir del año y el día de la semana. El primer domingo es el primer día de la semana 1, los días anteriores en el año son la semana 0 (como en "U%" en Data.Time.Format.formatTime). El domingo es 0, el sábado es 6 ("% w" en Data.Time.Format.formatTime


fromMondayStartWeek

fromMondayStartWeek :: Integer -> Int -> Int -> Day

El primer parámetro se corresponde con el año, el según con el día de la semana (el lunes es 1 y el domingo es 7) y el último es un tipo Day La inversa de mondayStartWeek. Obtiene un día determinado del año, el número de la semana de comienzo del lunes y el día de la semana. El primer lunes es el primer día de la semana 1, los días anteriores en el año son la semana 0 (como "% W" en Data.Time.Format.formatTime)


fromMondayStartWeekValid

fromMondayStartWeekValid :: Integer -> Int -> Int -> Day

Igual que el anterior pero si los datos son incorrectos entonces no devuelve nada.


fromSundayStartWeek

fromSundayStartWeek :: Integer -> Int -> Int -> Day

El primer parrámetro se corresponde con el año, el según con el pirmer domingo de la semana y el tercero con el día de semana (domingo es 0 y 6 para el sábado)

La inversa de la función sundayStartWeek. Obtiene un tipo Day dado el año y el número del día de comienzo del Domingo. El primer domingo es el primer día de la semana 1, cualquier día anterior en el año es la semana 0.


fromSundayStartWeekValid

fromSundayStartWeekValid :: Integer -> Int -> Int -> Day

Igual que la función anterior pero si los datos son erróneos entonces no devuelve nada.

Data.Time.Calendar.WeekDate

toWeekDate

toWeekDate :: Day -> (Integer, Int, Int)

Convierte al formato ISO 8601 el día de la semana. El primer elemento es el año, el según el número de la semana (1-53) y el tercer elemento es el día de la semana (1 para el Lunes y 7 para el Domingo). Tenga en cuenta que "Week" años no son exactamente lo mismo que año gregoriano, como el primer día del año es siempre un lunes. La primera semana del año es la primera semana para contener por lo menos cuatro días en el año gregoriano correspondiente.


fromWeekDate

fromWeekDate :: Integer -> Int -> Int -> Day Convierte desde el formato ISO 8601 al tipo Day. El primer elemento es el año, el según el número de la semana (1-53) y el tercer elemento es el día de la semana (1 para el Lunes y 7 para el Domingo). Los datos erroneos de días y semanas serán aproximados al rango correcto.


fromWeekDateValid

fromWeekDateValid :: Integer -> Int -> Int -> Maybe Day Igual que el anterior, pero en el caso de datos erroneos devolverá nada.


showWeekDate

showWeekDate :: Day -> String Muestra en argumento Day en el formato ISO 8601 (yyyy-Www-d), Por ejemplo “2006-W46-3”.

Data.Time.Clock

En este apartado se demostrarán las funciones para trabajar con la biblioteca Data.Time.Clock, específica esta para trabajar con tiempos tanto UTC como UT1. Podremos dividir esta sección en tres partes:

Tiempo Universal: Para mediciones de tiempo en la tierra.

La modificación Julian Date es la fracción del día transcurrida medida desde la medianoche UT. Se utiliza para representar UT1, que es el tiempo medido por la rotación de la Tierra, ajustado por las diferentes oscilaciones.

           getModJulianDate :: Rational

Intervalos Absolutos: Se trata de un período de tiempo, medido por un reloj. Las funciones de conversión serán tratados como segundos. Tiene una precisión de 10 ^ -12 s.

Tipo de datos:

            DiffTime

Funciones:

            secondsToDiffTime :: Integer -> DiffTime

Crear un difftime que representa un número entero de segundos.

            picosecondsToDiffTime :: Integer -> DiffTime

Crea un difftime que representa un número en picosegundos (Un [picosengudo] es 10−12. Es decir 0,000000000001 segundos)


UTC: es el tiempo medido por un reloj, corregido para seguir el ritmo de la tierra mediante la adición o eliminación de segundo ocasionales, conocido como "salto de segundo". Estas correcciones no son predecibles y se anuncian con un preaviso de seis meses. La tabla de estas correcciones no se proporciona, por lo que cualquier programa compilado hace mas de seis meses podría quedar obsoleto.

Tipo de dato:

             UTCTime

Esta es la simple representación de la medición de tiempo UTC, consiste en un número de dia y un tiempo transcurrido desde la media noche. Si consideramos que un día tiene un salto de segundo agregado a él, este tendrá 86401 segundos.

Funciones:

              utctDay :: Day	

Retorna el día.

              utctDayTime :: DiffTime	

Retorna el tiempo desde media noche. 0 <= t < 86401s (debido al salto de segundo existente) .

Ejemplos:

             Prelude Data.Time.Clock> getCurrentTime >>= return.utctDay
             Prelude Data.Time.Clock> getCurrentTime >>= return.utctDayTime
             60248.01842s


Tipo de dato:

             NominalDiffTime

Se trata de un período de tiempo, medido por UTC. Las funciones de conversión será tratado como segundos. Tiene una precisión de 10−12 s. Ignora salto de segundos, así que no es necesariamente una cantidad fija de tiempo de reloj. Por ejemplo, las 23:00 UTC + 2 horas de NominalDiffTime = 01:00 UTC (+ 1 día), con independencia de que un salto de día intervino.

Funciones:

              addUTCTime :: NominalDiffTime -> UTCTime -> UTCTime

addUTCTime a b = a + b, incrementa el tiempo representando por a en el tiempo representado por b.

              diffUTCTime :: UTCTime -> UTCTime -> NominalDiffTime

diffUTCTime a b = a - b, decremento el tiempo representado por a menos el tiempo representado por b.

               getCurrentTime :: IO UTCTime

Obtiene el tiempo UTC actual del reloj del sistema.

Ejemplos de uso:

              addUTCTime (365 * 24 * 60 * 60) getCurrentTime
              diffUTCTime (365 * 24 * 60 * 60) getCurrentTime

Data.Time.Clock.POSIX

POSIX es el Acrónimo de Portable Operating System Interface; la X viene de UNIX como seña de identidad de la Application Programming Interface|API.

El término fue sugerido por Richard Stallman en respuesta a la demanda de la IEEE, que buscaba un nombre fácil de recordar. Una traducción aproximada del acrónimo podría ser "Interfaz para Sistemas Operativos migrables basados en UNIX".

POSIX es necesario para establecer marcas de tiempos y similares, aunque la mayoría de los usuarios no necesitan este módulo.


Tipo de dato:

             POSIXTime

Es el tiempo nominal transcurrido desde 1970-01-01 00:00 UTC

Para convertir de un Foreign.C.CTime o System.Posix.EpochTime, se debe usar realToFrac.

Funciones:

              posixDayLength :: NominalDiffTime

Devuelve el tiempo en segundos nominales de los que consta cualquier día. Es decir 86.400

Uso:

               Prelude Data.Time.Clock Data.Time.Clock.POSIX> posixDayLength
               86400s 
               posixSecondsToUTCTime :: POSIXTime -> UTCTime

Transformación de la marca de tiempo de segundos POSIX a una forma standard como de UTCTime.

               utcTimeToPOSIXSeconds :: UTCTime -> POSIXTime

Transformación inversa de la descrita en la función anterior. Con esta función podemos transformar una marca de tiempo en forma de UTCTime a segundos POSIX.

Ejemplo de uso, Teniendo en cuenta la fecha "07 de marzo 2009 19:30 CET", la salida será el momento 12 horas más tarde en un formato legible por humanos.

          <lang haskell>import Data.Time.Clock.POSIX
          import Data.Time.Format
          import System.Locale
          main = print t2
          where t1 = readTime defaultTimeLocale
                     "%B %e %Y %l:%M%P %Z"
                     "March 7 2009 7:30pm EST"
                t2 = posixSecondsToUTCTime $ 12*60*60 + utcTimeToPOSIXSeconds t1</lang>
          Main Data.Time.Clock Data.Time.Clock.POSIX> main
          2009-03-08 12:30:00 UTC


Data.Time.Clock.TAI

Tiempo Atómico Internacional es un estándar atómico de alta precisión para medir el tiempo propio de un cuerpo geoide con un reloj atómico.

Tipo de datos:

          AbsoluteTime

Funciones:

          taiEpoch :: AbsoluteTime

La época de la ITF, que es 11/17/1858 00:00:00 TAI.

Uso:

          Main Data.Time.Clock Data.Time.Clock.POSIX Data.Time.Clock.TAI> taiEpoch
          1858-11-17 00:00:00 TAI
          addAbsoluteTime :: DiffTime -> AbsoluteTime -> AbsoluteTime

addAbsoluteTime a b = a + b, incrementa el tiempo representando por a en el tiempo representado por b.

          diffAbsoluteTime :: AbsoluteTime -> AbsoluteTime -> DiffTime

diffAbsoluteTime a b = a - b, decrementa el tiempo representando por a en el tiempo representado por b.

Tipo de datos:

          LeapSecondTable = Day -> Integer

TAI - UTC durante el día de hoy. La tabla no se proporciona, ya que entonces cualquier programa compilado con ella quedaría obsoleto en seis meses.

Funciones:

          utcDayLength :: LeapSecondTable -> Day -> DiffTime

Retorna una marca de tiempo con el DiffTime transcurrido en un determinado día.

          utcToTAITime :: LeapSecondTable -> UTCTime -> AbsoluteTime

Convierte una marca horaria de formato UTCTime a TAI

          taiToUTCTime :: LeapSecondTable -> AbsoluteTime -> UTCTime

Convierte una marca horaria de formato TAI a UTCTime

Tipo de datos:

          parseTAIUTCDATFile :: String -> LeapSecondTable

Analizar el contenido de un archivo de tai-utc.dat. Esto no hace ningún tipo de validación y devolverá un error cuando la entrada no se encuentre en el formato correcto.

Data.Time.Format

Formato de estilo UNIX

Sustituye cada cadena %-código por un formatCharacter.

Sirve para todos los tipos (estos tres se hacen directamente, no por formatCharacter):

%%

   % 

%t

   tabulador

%n

   nueva línea

Al estilo de los modificadores de glibc puede ser utilizado antes de la marca (en este caso marcado como z):

%-z

   sin relleno

%_z

   rellenar con espacios

%0z

   rellenar con ceros

%^z

   convertir a mayúsculas

%#z

   convertir a minúsculas (siempre, a diferencia de glibc)

Para TimeZone, ZonedTime y UTCTime:

%Z

   desplazamiento de zona horaria en el formato -HHMM.

%Z

   nombre de zona horaria

Para LocalTime, ZonedTime y UTCTime:

%C

   como DateTimeFmt configuración regional (por ejemplo %a %b %e %H: %M: %S %Z %Y)

Para TimeOfDay, LocalTime, ZonedTime y UTCTime

%R

   con formato %H:%M

%T

   con formato %H:%M:%S

%X

   como TimeFmt locale (ejemplo %H:%M:%S)

%r

   como Time12Fmt locale (ejemplo %I:%M:S %p)

%P

   para el medio día (amPm locale), convierte a minusculas am y pm 

%p

   para el medio día (amPm locale), convierte en mayúsculas AM, PM 

%H

   horas en formato 24 horas con ceros a la izquierda si es necesario, 00 - 23 

%I

   horas en foramto 12 horas con ceros a la izquierda si es necesario, 01 - 12 

%k

   horas en formato 24 horas dejando espacios si es necesario, 0 - 23 

%l

   horas en formato 12 horas dejando espacios si es necesario, 1 - 12 

%M

   minutos, 00 - 59 

%S

   segundos, sin parte decimal, 00 - 60 

%q

   picosegundos, incluyendo ceros a la derecha, 000000000000 - 999999999999. 

%Q

   punto decimal y hasta 12 decimales en segundo lugar, sin los ceros finales. Para un número entero de segundos,% Q produce la cadena vacía.

Para Day, LocalTime, UTCTime y ZonedTime:

%D

   igual que %m/%d/%y 

%F

   igual que %Y-%m-%d 

%x

   como DateFmt locale (e.g. %m/%d/%y) 

%Y

   año

%y

   los ultimos dos dígitos del año, 00 - 99 

%C

   centenario (comienza por los dos primeros dígitos del año), 00 - 99

%B

   nombre del mes en formato largo, January - December 

%b, %h

   nombre del mes en formato corto, Jan - Dec 

%m

   mes del año, dejando ceros a las izquierda si es necesario, 01 - 12 

%d

   día del mes dejando ceros a la izquierda si es necesario, 01 - 31 

%e

   día del mes dejando espacios a la izquierda si es necesario, 1 - 31 

%j

   dia del año, 001 - 366 

%u

   día de la semana en formato numérico, 1 - 7 

%a

   día de la semana en formato corto, Sun - Sat 

%A

   día de la semana en formato largo, Sunday - Saturday 

%U

   número de semana del año, donde la semana comenzará el domingo, 00 - 53 

%w

   dia de la semana con números, 0 (para el domingo) - 6 (para el sábado) 

%W

  número de semana del año, donde la semana comenzará el lunes 00 - 53
Análisis de estilo UNIX

ParseTime t

=> TimeLocale Tiempo local.

-> String Formato de la cadena.

-> String Entrada de la cadena.

-> Maybe t El valor del tiempo, o nada si la entrada no se pudo analizar con el formato dado.


Analiza un valor de tiempo dado una cadena de formato. Compatible con los mismos %-códigos como formatTime. Permite los espacios en blanco al final. Se aceptan algunas variaciones en la entrada:

% z
acepta cualquiera de -HHMM o -HH: MM.


% Z
acepta cualquier cadena de letras, o cualquiera de los formatos aceptados por % z.


ReadTime t

=> TimeLocale Tiempo local.

-> String Formato de la cadena.

-> String Entrada de la cadena.

-> t El valor del tiempo

Analiza un valor de tiempo especificado en la cadena de formato. Se produce un error si la entrada no se pudo analizar con el formato dado.

readsTime

ParseTime t
=> TimeLocale Tiempo local.
-> String Formato de la cadena
-> ReadS t

Analizar un valor de tiempo especificado en la cadena de formato

Referencias

Biblioteca Data.Time

[1]

Autoridad de certificación de IEEE POSIX

[2]

Herramientas personales