Опубликован: 19.09.2008 | Доступ: свободный | Студентов: 656 / 70 | Оценка: 4.50 / 5.00 | Длительность: 21:25:00
Лекция 25:

Дата и время

< Лекция 24 || Лекция 25: 12 || Лекция 26 >
Аннотация: В этой лекции мы рассмотрим библиотеку Time. Эта библиотека предназначена для работы Haskell'я со временем системных часов и датой

module Time (
ClockTime, 
Month(January,February,March,April,May,June,
      July,August,September,October,November,December),
Day(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday),
CalendarTime(CalendarTime, ctYear, ctMonth, ctDay, ctHour, ctMin,
     ctSec, ctPicosec, ctWDay, ctYDay, 
                     ctTZName, ctTZ, ctIsDST),
TimeDiff(TimeDiff, tdYear, tdMonth, tdDay, tdHour,
 tdMin, tdSec, tdPicosec),
getClockTime, addToClockTime, diffClockTimes,
        toCalendarTime, toUTCTime, toClockTime,
        calendarTimeToString, formatCalendarTime ) where

import Ix(Ix)

data ClockTime = ... - Зависит от реализации
instance Ord  ClockTime where ...
instance Eq   ClockTime where ...

data Month =  January   | February | March    | April
           |  May       | June     | July     | August
           |  September | October  | November | December
           deriving (Eq, Ord, Enum, Bounded, Ix, Read, Show)

data Day   =  Sunday | Monday  | Tuesday  | Wednesday | Thursday 
           |  Friday | Saturday
           deriving (Eq, Ord, Enum, Bounded, Ix, Read, Show)

data CalendarTime = CalendarTime {
ctYear   :: Int,
        ctMonth  :: Month,
        ctDay, ctHour, ctMin, ctSec  :: Int,
ctPicosec :: Integer,
ctWDay    :: Day,
ctYDay       :: Int,
ctTZName   :: String,
ctTZ          :: Int,
ctIsDST :: Bool
} deriving (Eq, Ord, Read, Show)

data TimeDiff = TimeDiff {
tdYear, tdMonth, tdDay, tdHour, tdMin, tdSec :: Int,
tdPicosec      :: Integer
} deriving (Eq, Ord, Read, Show)
- Функции со временем
getClockTime         :: IO ClockTime
     
addToClockTime       :: TimeDiff  -> ClockTime -> ClockTime
diffClockTimes       :: ClockTime -> ClockTime -> TimeDiff
     
toCalendarTime       :: ClockTime    -> IO CalendarTime
toUTCTime            :: ClockTime    -> CalendarTime
toClockTime          :: CalendarTime -> ClockTime
calendarTimeToString :: CalendarTime -> String
formatCalendarTime   :: TimeLocale -> String -> CalendarTime -> String

Библиотека Time обеспечивает стандартные функциональные возможности работы со временем системных часов, включая информацию о часовых поясах. Она соответствует RFC 1129 в его использовании всеобщего скоординированного времени (UTC -- Coordinated Universal Time).

ClockTime является абстрактным типом, который используется для системных внутренних часов (системного внутреннего генератора тактовых импульсов). Такты системных часов можно сравнивать непосредственно или после преобразования их в календарное время CalendarTime для ввода - вывода или других манипуляций. CalendarTime является удобным для использования и манипулирования представлением внутреннего типа ClockTime. Числовые поля имеют следующие диапазоны:

Значение Диапазон Комментарии
ctYear -maxInt... maxInt Даты до григорианских являются ошибочными
ctDay 1... 31
ctHour 0... 23
ctMin 0... 59
ctSec 0... 61 Допускает до двух скачков секунд
ctPicosec 0... (1012)-1
ctYDay 0... 365 364 в невисокосные годы
ctTZ -89999... 89999 Отклонение от UTC в секундах

Поле ctTZName -- это название часового пояса. Значение поля ctIsDST равно True, если имеет место летнее время, и False иначе. Тип TimeDiff регистрирует различия между двумя тактами системных часов в удобной для использования форме.

Функция getClockTime возвращает текущее время в его внутреннем представлении. Выражение addToClockTime d t складывает разницу во времени d и время системных часов t, чтобы получить новое время системных часов. Разница d может быть положительной или отрицательной. Выражение diffClockTimes t1 t2 возвращает разницу между двумя значениями системных часов t1 и t2, как и TimeDiff.

Функция toCalendarTime t преобразовывает t в местное время в соответствии с часовым поясом и установками летнего времени. Из-за этой зависимости от местной среды toCalendarTime находится в монаде IO.

Функция toUTCTime t преобразовывает t в CalendarTime в стандартном формате UTC. toClockTime l преобразовывает l в соответствующее внутреннее значение ClockTime, игнорируя содержимое полей ctWDay, ctYDay, ctTZName и ctIsDST.

Функция calendarTimeToString форматирует значения календарного времени, используя национальные особенности и строку форматирования.

< Лекция 24 || Лекция 25: 12 || Лекция 26 >
Николай Щербаков
Николай Щербаков
Россия, Москва
Олег Корсак
Олег Корсак
Латвия, Рига