Haskell 98报告
顶部|后面|下一个|目录|功能索引

24  日期和时间


模块时间(
时钟时间
月(一月、二月、三月、四月、五月、六月,
七月、八月、九月、十月、十一月、十二月),
天(星期日、星期一、星期二、星期三、星期四、星期五、星期六),
日历时间(CalendarTime、ctYear、ctMonth、ctDay、ctHour、ctMin、,
ctSec、ctPicosec、ctWDay、ctYDay、
ctTZ名称、ctTZ、ctIsDST),
时间差异(时间差异,tdYear,tdMonth,tdDay,tdHour,
tdMin、tdSec、tdPicosec),
获取时钟时间、添加到时钟时间、差异时钟时间、,
到日历时间,到UTC时间,到时钟时间,
calendarTimeToString,formatCalendarTime),其中

输入Ix(Ix)

数据时钟时间=。。。--依赖于实施
实例Ord ClockTime,其中。。。
实例Eq ClockTime,其中。。。

data Month=一月|二月|三月|四月
|5月|6月|7月|8月
|9月|10月|11月|12月
派生(Eq、Ord、Enum、Bounded、Ix、Read、Show)

data Day=星期日|星期一|星期二|星期三|星期四
|星期五|星期六
派生(Eq、Ord、Enum、Bounded、Ix、Read、Show)

data CalendarTime=日历时间{
ctYear::国际,
ctMonth::月,
ctDay、ctHour、ctMin、ctSec::Int、,
ctPicosec::整数,
ctWDay::天,
ctYDay::整数,
ctTZName::字符串,
ctTZ::国际,
ctIsDST::布尔
}推导(等式、命令、读取、显示)

data TimeDiff=时间差异{
tdYear、tdMonth、tdDay、tdHour、tdMin、tdSec::Int、,
tdPicosec::整数
}推导(等式、命令、读取、显示)

--定时功能
获取时钟时间::IO时钟时间
     
添加到时钟时间::TimeDiff->时钟时间->时钟时间
差异时钟时间::时钟时间->时钟时间->时间差异
     
到日历时间::时钟时间->IO日历时间
到UTC时间::时钟时间->日历时间
到时钟时间::CalendarTime->ClockTime
calendarTimeToString::CalendarTime->String
formatCalendarTime::TimeLocale->String->CalendarTime->String

这个时间库提供时钟时间的标准功能,包括时区信息。它遵循RFC 1129使用协调世界时(UTC)。

时钟时间是抽象类型,用于系统的内部时钟时间。时钟时间可以直接比较或转换为日历时间日历时间用于I/O或其他操作。日历时间是用户可读和可操作的内部时钟时间类型。数字字段具有以下内容范围。
价值范围评论
ct年-最大Int。。。最大Int产前日期不准确
ctDay公司1...31
ct小时0...23
ctMin(最小值)0...59
ct秒0...61允许两个跳跃秒
ctPicosec公司0...(1012)-1
ctY日0...365非闰年364人
ctTZ公司-89999...89999UTC变化(秒)
这个ctTZ名称字段是时区的名称。这个ctIsDST公司领域真的夏令时是否有效,以及False(错误)否则。这个时间差异type在中记录两个时钟时间的差异用户可读的方式。

功能获取时钟时间返回其内部的当前时间代表。表达式添加到时钟时间 d日 t吨添加时差d日和a时钟时间t吨以产生新的时钟时间。差异d日可以是积极或消极。表达式差异时钟时间 t1时间 t2时间返回两个时钟时间之间的差值t1时间t2时间作为一个时间差异.

功能至日历时间 t吨转换t吨到本地时间,已修改根据时区和夏令时设置转换时间。由于对当地环境的依赖,至日历时间位于IO(输入输出)莫纳德。

功能到UTC时间 t吨转换t吨日历时间采用标准UTC格式。到时钟时间 转换进入相应的内部时钟时间忽略ctW天,ctY日,ctTZ名称、和ctIsDST公司领域。

功能日历时间到字符串格式使用本地约定和格式字符串的日历时间。

24.1  图书馆时间


模块时间(
时钟时间
月(一月、二月、三月、四月、五月、六月,
七月、八月、九月、十月、十一月、十二月),
天(星期日、星期一、星期二、星期三、星期四、星期五、星期六),
日历时间(CalendarTime、ctYear、ctMonth、ctDay、ctHour、ctMin、,
ctSec、ctPicosec、ctWDay、ctYDay、
ctTZ名称、ctTZ、ctIsDST),
时间差异(时间差异,tdYear,tdMonth,tdDay
td小时、td分钟、td秒、td皮秒),
获取时钟时间、添加到时钟时间、差异时钟时间、,
到日历时间,到UTC时间,到时钟时间,
calendarTimeToString,格式CalendarTime),其中

导入Ix(Ix)
导入区域设置(TimeLocale(..),defaultTimeLocale)
导入字符(intToDigit)

data ClockTime=。。。--依赖于实施
实例Ord ClockTime,其中。。。
实例Eq ClockTime,其中。。。

data Month=一月|二月|三月|四月
|5月|6月|7月|8月
|9月|10月|11月|12月
派生(Eq、Ord、Enum、Bounded、Ix、Read、Show)

data Day=星期日|星期一|星期二|星期三|星期四
|星期五|星期六
派生(Eq、Ord、Enum、Bounded、Ix、Read、Show)

data CalendarTime=日历时间{
ctYear::国际,
ctMonth::月,
ctDay、ctHour、ctMin、ctSec::Int、,
ctPicosec::整数,
ctWDay::天,
ctYDay::整数,
ctTZName::字符串,
ctTZ::内部,
ctIsDST::布尔
}推导(Eq、Ord、Read、Show)

data TimeDiff=时间差异{
tdYear、tdMonth、tdDay、tdHour、tdMin、tdSec::Int、,
tdPicosec::整数
}推导(等式、顺序、读取、显示)


获取时钟时间::IO时钟时间
getClockTime=。。。--依赖于实施

添加到时钟时间::TimeDiff->时钟时间->时钟时间
addToClockTime td ct=。。。--依赖于实施

差异时钟时间::时钟时间->时钟时间->时间差异
diffClockTimes ct1 ct2=。。。--依赖于实施

到日历时间::时钟时间->IO日历时间
toCalendarTime ct=。。。--依赖于实施

到UTC时间::时钟时间->日历时间
toUTC时间ct=。。。--依赖于实施

到时钟时间::CalendarTime->ClockTime
toClockTime校准=。。。--依赖于实施

calendarTimeToString::CalendarTime->String
calendarTimeToString=formatCalendarTime defaultTimeLocale“%c”

formatCalendarTime::TimeLocale->String->CalendarTime->String
formatCalendarTime l fmt ct@(CalendarTime-年-月-日-小时-分-秒-秒
wday yday tzname _ _)=
doFmt功能表
其中doFmt(“%”:c:cs)=解码c++doFmt-cs
doFmt(c:cs)=c:doFmt-cs
doFmt“”=“”

到12::Int->Int
到12 h=让h'=h`mod`12 in,如果h'==0,则其他12 h'

解码'A'=fst(wDays l!!fromEnum wday)
解码'a'=snd(wDays l!!fromEnum wday)
decode'B'=fst(月份l!!from枚举mon)
decode'b'=snd(月份l!!from枚举mon)
decode'h'=snd(月份l!!来自Enum mon)
解码'C'=show2(年份`quot`100)
解码'c'=doFmt(dateTimeFmt l)
解码'D'=doFmt“%m/%D/%y”
解码'd'=演出2天
解码'e'=show2'天
解码“H”=演出2小时
解码“I”=show2(12小时)
解码“j”=show3 yday
解码“k”=show2小时
解码'l'=show2'(12小时)
解码“M”=演出2分钟
解码'm'=show2(fromEnum mon+1)
解码'n'=“\n”
解码“p”=(如果小时<12,则fst else snd)(amPm l)
解码'R'=doFmt“%H:%M”
解码'r'=doFmt(时间12Fmt l)
解码'T'=doFmt“%H:%M:%S”
解码't'=“\t”
解码“S”=显示2秒
解码's'=。。。--依赖于实施
解码“U”=show2((yday+7-fromEnum wday)`div`7)
解码“u”=显示(让n=fromEnum wday in
如果n==0,则其他n)
解码“V”=
let(周,天)=
(yday+7-如果fromEnum wday>0,则
fromEnum wday-1其他6)`divMod`7
在show2中(如果天数>=4,则
周+1
else如果week==0,则为53 else week)

解码“W”=
show2((yday+7-如果fromEnum wday>0,则
fromEnum wday-1其他6)`div`7)
解码'w'=显示(fromEnum wday)
解码'X'=doFmt(时间Fmt l)
解码'x'=doFmt(日期Fmt l)
解码'Y'=显示年份
解码'y'=show2(年份`rem`100)
解码“Z”=tzname
解码“%”=“%”
解码c=[c]

show2,show2',show3::Int->字符串
show2 x=[intToDigit(x`quot`10),intToDi吉特(x`rem`10)]

show2'x=如果x<10,则['',intToDigit x]否则show2 x

show3 x=整数到数字(x`quot`100):show2(x`rem`100)

Haskell 98报告
顶部|后面|下一个|目录|功能索引