Delphi 日期时间函数详解

各种时间类型之间的转换函数

DateTimeToFileDate函数:
定义:DateTimeToFileDate(DateTime: TDateTime): Integer;
作用: 将一个TDateTime类型的时间转化为Dos环境中的时间,Dos环境下对时间的访问
方法和VCL中的TdateTime类型不一样,在进行文件操作时,为了保持时间的一致性,需
要使用DateTimeToFileDate函数进行转化,返回的Integer的值就是Dos下的用于描述时
间的值。
DateTimeToSystemTime 过程:
定义:procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TS
ystemTime);
作用:将一个TDateTime类型的时间转换为Win API函数所使用的TSystemTime类型,在使
用WinApi函数操纵时间时用到。
SystemTimeToDateTime 函数:
定义:function SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTim
e;
作用:将一个在WinApi函数中得到的TSysTemTime类型的数转换为TDateTime类型。
DateTimeToTimeStamp 函数:
TimeStampToDateTime 函数:
定义:DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
作用:用于在TDataTime类型与TTimeStamp之间进行互相转换。TDataTime 用一个doubl
e描绘一个时间,而TTimeStamp则是采用两个整形数分别描述时间。两种类型的区别可参
考文章开始处的数据类型描述部分。
EncodeDate 函数:
定义:function EncodeDate(Year, Month, Day: Word): TDateTime;
作用: 输入年(year),月(month),日(day)的值,将该日期返回为TDateTime类型,年
的范围为1-9999,月份的范围为1-12,日期的范围视当月的情况而定,如果输入的值超出
范围,则将产生一个EConvertError错误。
DecodeDate 过程:
定义:procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);
作用:输入一个TDateTime类型的日期,将其转为年(Year),月(Month),日(Day)的值。
如果输入值为0或小于0,则年月日均为0,
EncodeTime 函数:
定义:EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;
作用:输入小时(Hour),分(min),秒(Sec),微秒(MSec)的值,返回一个TDateTime类型的
时间,该值为一个介于0至1之间的小数。Hour的取值范围为0-23,Min的取值范围为0-59
,Sec的取值范围为0-59,MSec的取值范围为0-999,如果输入值超出范围,则产生一个EC
onvertError 错误。
DecodeTime 过程:
定义:procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);

作用:输入一个时间,将其转换为小时(Hour),分(min),秒(Sec),微秒(MSec)的值。
TDateTime类型与字符串型转换函数:
DateTimeToStr 函数:
DateToStr 函数
TimeToStr函数
定义:function DateTimeToStr(DateTime: TDateTime): string;
function TimeToStr(Time: TDateTime): string;
function TimeToStr(Time: TDateTime): string;
作用:将一个TDateTime类型的数转换成字符串,DateTimeToStr转换日期和时间,Date
ToStr只转换日期,TimeToStr只转换时间。转换后的输出效果为YYYY-M-D H:M:S
StrToDateTime函数
StrToDate函数
StrToTime函数
定义:function StrToDateTime(const S: string): TDateTime;
function StrToDate(const S: string): TDateTime;
function StrToTime(const S: string): TDateTime;
作用:将带有日期时间格式的字符串转化成TDateTime,其中S必须是一个有效的字符串
,如
YY-MM-DD HH:MM:SS格式,否则就会触发EConvertError事件,提示错误信息。
时间部分的字符串必须是由2~3个的数值字串构成,并且采用在Windows区域设置
中设置的分隔字符进行分隔,其格式要求符合在Windows区域设定中的设定,其中HH,MM(
小时,分钟)必须添加,SS(秒)可选,也可以在后面加入 Am和Pm区分上下午,这时候
系统将认为采用12小时表示法,否则认为采用24小时表示法。
日期部分的格式要求符合Windows区域设置中的短日期格式,也是由2~3个的数值
字串构成,如果在字符串中只有2个数,则认为是指定了月份和日期,年份采用当前年份

如果在区域设置中采用两位年份的表示方法,则系统将会采用以下方法处理:
首先在区域设置中取得两位年份的起始年份,如在区域设置中设两位年份范围为
1932-2031年,则起始年份为32年,如果这个起始年份为0,则认为两位年份表示的都是
本世纪,如果其实年份大于0 ,则采用当前年份减去起始年份的值,这个值称为基准值
,大于等于这个值则认为事本世纪,否则认为是下世纪,下面给出几个例子说明:
DateTimeToString 过程:
FormatDateTime 函数:
定义:procedure DateTimeToString(var Result: string; const Format: string; D
ateTime: TDateTime);
function FormatDateTime(const Format: string; DateTime: TDateTime): s
tring;
作用:通过定义Format字串中的格式得到要输出时间字符串,例如要输出“今天是2002
年5月5日,星期五”就可以用这两种方法,这两个方法的作用相同,只是一个是通过共
享变量取得输出字符串,值在Result中,一个是通过返回值取得输出字符串,DateTime
参数是希望输出的日期值,Format由格式标志与附加字符串组合而成。附加字串用””
圈起,就像C中的Printf函数.如“今天是2002年5月5日,星期五”的Format值就是 ‘”
今天是”yyyy”年”mm”月”dd”日,” dddd’,yyyy,mm,dd,dddd都是格式标识,各
种格式标识的解释如下:
d :用一位或两位整数显示日子(1-31)
dd :用两位整数显示日子,不足两位的用0补足(01-31)
ddd :按缩略方式显示当前的星期号,如果Windows是英文版,则显示为Mon
-Sun,如果是中文版,则显示同dddd。
dddd :按完整方式显示当前的星期号,如Windows是英文版,则显示Monday-
SumDay,如果是中文版,则显示星期一~星期日
ddddd :按区域设置中的短日期格式输出。
dddddd :按区域设置中的长日期格式输出。
m :用一位或两位整数显示月份(1-12)
mm :用两位整数显示月份,不足两位的用0补足(01-12)
mmm :使用缩略方式显示月份名称,英文版显示为Jan-Dec,中文版同mmmm
mmmm :使用完整方式显示月份名称,英文版显示为January-December,中文版
为一月~十二月
yy :按两位整数方式显示年份(00-99)
yyyy :按四位整数方式显示年份(0000-9999)
h :用一位或两位整数显示小时(0-23)
hh :用两位整数显示小时,不足两位的用0补足(00-23)
n :用一位或两位整数显示分钟(0-60)
nn :用两位整数显示分钟,不足两位的用0补足(00-60)
s :用一位或两位整数显示秒数(0-60)
ss :用两位整数显示秒数,不足两位的用0补足(00-60)
z :用一位至两位整数显示毫秒数(0-999)
zzz :用三位整数显示毫秒数,不足三位的用0补足(000-999)
tt :按照区域设置中的格式显示日期
am/pm :用于12小时制的显示,带有AM的则表示从0点~12点,pm代表从12点~
0点。
与时间相关的变量:
Delphi封装了区域设置的各种信息,并以此定义了一系列的变量,下面介绍与时间相关
的部分变量:
DateSeparator :Char
日期分隔符,用于分隔年月日
TimeSeparator :Char
时间分隔符,用于分隔小时,分钟,秒
ShortDateFormat:String
区域设置中短日期格式的定义。
LongDateFormat :String
区域设置中长日期格式的定义。
ShortTimeFormat:String
区域设置中短时间格式的定义。
LongTimeFormat :String
区域设置中长时间格式的定义。
TimeAMString :String
用来表示上午的字符串
TimePMString :String
用来表示下午的字符串
ShortMonthNames:array[1..12] of String;
用于缩略表示月份名称的数组,就是在使用FormatDateTime时显示的mmm标识的字符串
LongMonthNames:array[1..12] of String;
用于完整表示月份名称的数组,就是在使用FormatDateTime时显示的mmmm标识的字符串

ShortDayNames :array[1..7] of String;
用于缩略表示星期名称的数组,就是在使用FormatDateTime时显示的ddd标识的字符串
LongDayNames :array[1..7] of String;
用于完整表示星期名称的数组,就是在使用FormatDateTime时显示的ddd标识的字符串
TwoDigitYearCenturyWindow:Word = 50;
在使用两位年份时的起始年份。

Day开头的函数

Unit

DateUtils

functionDateOf(constAValue:TDateTime):TDateTime;

描述
使用DateOf函数用来把一个TDateTime类型的变量转变成一个
只带有日期的TDateTime类型变量。
例如:
showmessage(DateTimetostr(dateof(now())));
你得到的是2003/03/19
而showmessage(DateTimetostr((now())));
得到的是2003/03/1910:50:49

●functionDateTimeToStr(DateTime:TDateTime):string;

描述
DateTimeToString函数将TDateTime类型的参数DateTime转换成一个
字符串,使用给定的全局变量ShortDateFormat的格式,时间部分按照
给定的全局变量LongTimeFormat的格式。
其中DateTime为零的部分将不会显示出来。

例如:
ShortDateFormat:='yyyymmdd';
showmessage(DateTimetostr((now())));
你将得到:2003031910:50:49


●procedureDateTimeToString(varResult:string;constFormat:string;DateTime:TDateTime);

描述:
DateTimeToString方法将TDateTime类型的参数DateTime按照由参数Format提供的格式
转化成字符串,并保存在Result中。
对于Format的格式类型,请看Date-Timeformatstrings的帮助。

例如:
DateTimeToString(result,'yyyymmdd',now());
那么result的结果为:2003031910:50:49

●procedureDateTimeToSystemTime(DateTime:TDateTime;varSystemTime:TSystemTime);

描述:
有时为了调用API函数来使用系统时间,你可以使用DateTimeToSystemTime方法,来将一个
TDateTime类型的时间变量转换成一个TSystemTime类型的系统时间。

●functionDateTimeToUnix(constAValue:TDateTime):Int64;

描述:
使用DateTimeToUnix函数来将一个TDateTime型时间变量转换成一个相应的Unix格式
的日期和时间。
Unixdate-and-timevaluesareencodedasthenumberofsecondsthathaveelapsed
sincemidnightatthestartofJanuary1,1970.


●functionDateToStr(Date:TDateTime):string;

描述:
使用DateToStr函数能得到TDateTime日期时间类型的日期部分。日期的转换格式依赖于
全局变量ShortDateFormat。

●functionDayOf(constAValue:TDateTime):Word;

描述:
对于给定的TDateTime类型的日期时间,使用DayOf函数能得到该日期是该月份的第几天。
该函数的返回数值在1到31之间
注意:DayOf函数得到的结果与DayOfTheMonth相同。

例如:
showmessage(inttostr(dayof(now)));
得到的是:19(今天是某月19日)

●functionDayOfTheMonth(constAValue:TDateTime):Word;

与DayOf相同。

●functionDayOfTheWeek(constAValue:TDateTime):Word;

描述:
对于给定的TDateTime类型的日期时间,使用DayOfTheWeek函数能得到该日期是该星期的
第几天。DayOfTheWeek函数的返回数值为1到7,其中1表示星期一,而7表示星期日。
注意:DayOfTheWeek是ISO8601标准的(此标准为星期一是一周的第一天)。对于一周
的第一天是星期日的标准,如果想获得星期数,请使用DayOfWeek函数。
Tip:Tomakethereturnvaluemorereadable,usetheDayofweekconstants.

●functionDayOfTheYear(constAValue:TDateTime):Word;

描述:
根据给定的日期时间参数AValue,使用DayOfTheYear函数能得到在该日期所在的年份中,该
日期按照顺序所计算的天数。因此,作为TDateTime类型的变量“1月1日”在该函数所得到的
结果为1,“1月2日”所得到的结果为2,“2月1日”所得到的结果就为32,依次类推。

●functionDayOfWeek(Date:TDateTime):Integer;

Description

DayOfWeekreturnsthedayoftheweekofthespecifieddateasanintegerbetween
1and7,whereSundayisthefirstdayoftheweekandSaturdayistheseventh.

Note:DayOfWeekisnotcompliantwiththeISO8601standard,whichdefinesMonday
asthefirstdayoftheweek.ForanISO8601compliantversion,usetheDayOfTheWeek
functioninstead.

描述:
按照给定的TDateTime类型的参数Date,DayOfWeek函数得到一周中的第几天,从1到7。
这里星期日是一周的第一天,而星期六是第七天。

●functionDaysBetween(constANow,AThen:TDateTime):Integer;

描述:
根据两个TDateTime类型的日期时间变量ANow和AThen,DaysBetween函数能得到两者之间的
天数的差距。
DaysBetween仅仅根据天数的不同来计算。因此,对于1999年12月31日下午11点59分到
2000年1月1日11点58分,该函数得到的结果是0,因为两者之间的时间差别还差1分钟才到
1天。

●functionDaysInAMonth(constAYear,AMonth:Word):Word;

描述:
对于各定的年份和月份,DaysInAMonth函数能得到该月份的总天数。
年份应该为从1到9999
月份应该为从1到12

●functionDaysInAYear(constAYear:Word):Word;

描述:
对于给定的年份,DaysInAYear函数能得到该年份的总天数。
年份应该为1到9999。

●functionDaysInMonth(constAValue:TDateTime):Word;

描述:
根据给定的TDateTime类型的时间日期参数AValue,DaysInMonth函数能得到该月份的总天数。

●functionDaysInYear(constAValue:TDateTime):Word;

描述:
根据给定的TDateTime类型的时间日期参数AValue,DaysInYear函数能得到该年份的总天数。

●functionDaySpan(constANow,AThen:TDateTime):Double;

描述:
根据两个TDateTime类型的日期时间参数ANow和AThen,DaySpan能得到在天数上的差距。
与DaysBetween函数不同,DaysBetween函数只是计算整的天数,而DaySpan函数会
将不足一天的数也得到。
注意:此函数返回的数值为Double型。

☆Month开头的函数

●functionMonthOf(constAValue:TDateTime):Word;

描述:
根据给定的TDateTime类型的时间日期参数AValue,MonthOf函数能得到该年份的该月份数。
MonthOf返回数值为1到12。
注意:MonthOf函数得到的数值与MonthOfTheYear函数相同

●functionMonthOfTheYear(constAValue:TDateTime):Word;

与MonthOf函数相同。

●functionMonthsBetween(constANow,AThen:TDateTime):Integer;

描述:
根据两个给定的TDateTime类型的参数ANow和AThen,MonthsBetween函数能得到两个日期在月份
上差距数。因为月份的天数是不同的,所以MonthsBetween函数返回的是一个近似值,该近似
值基于每个月份为30.4375天。不足一个月的数字将不被计算。
因此,例如,对于2月1日到2月28日,MonthsBetween返回的数值为0。
同样,对于2月1日到3月1日,MonthsBetween返回的数值也是0。

●functionMonthSpan(constANow,AThen:TDateTime):Double;

描述:
根据两个给定的TDateTime类型的参数ANow和AThen,MonthsBetween函数能得到两个日期在月份
上差距数。因为月份的天数是不同的,所以MonthsBetween函数返回的是一个近似值,该近似
值基于每个月份为30.4375天。与MonthsBetween函数不同,MonthsBetween函数不计算不足
一个月的数字,MonthSpan函数将会得到不足一个月的数字。
注意:此函数返回的类型为Double

●functionMonthStr(DateTime:TDateTime):string;

Description

HTTPmessageheaderspermitseveralformatsfortherepresentationofdateandtime
values.MonthStrconvertsaTDateTimevalueintoastringrepresentingthemonth.
MonthStrallowsserverapplicationstoworkwithdatevaluestakenfromHTTPrequest
messages,withoutworryingaboutthedetailsofhowtheyareformatted.

☆Week开头的函数

●functionWeekOf(constAValue:TDateTime):Word;

描述:
根据TDateTime类型的日期时间参数AValu,WeekOf函数会得到该星期为一年的第几个
星期。

●functionWeeksInAYear(constAYear:Word):Word;

描述:
WeeksInAYear函数根据年份得到在该年份中共包含多少个星期。

●functionWeeksBetween(constANow,AThen:TDateTime):Integer;

描述:
根据两个TDateTime类型的日期时间参数ANow和AThen,WeeksBetween函数将得到这两个时间在
星期上的差数。如果差数不足一个星期,则忽略掉。

●functionWeekSpan(constANow,AThen:TDateTime):Double;

描述:
根据两个TDateTime类型的日期时间参数ANow和AThen,WeeksBetween函数将得到这两个时间在
星期上的差数。如果差数不足一个星期,则WeekSpan函数不会忽略掉。
注意:此函数的返回类型为Double

☆Year开头的函数

●functionYearOf(constAValue:TDateTime):Word;

描述:
根据给定的TDateTime类型的日期时间参数AValue,YearOf函数能得到该日期的年份数字。
YearOf函数返回的数值为从1到9999

●functionYearsBetween(constANow,AThen:TDateTime):Integer;

描述:
根据两个给定的TDateTime类型的参数ANow和AThen,YearsBetween函数能得到两个日期在年份
上差距数。因为年份的天数是不同的,所以YearsBetween函数返回的是一个近似值,该近似
值基于每年的天数为365.25天。不足的一年的差距将不会被计算。
因此例如:对于1月1日和12月31日,如果这两个日期在同一年,则YearsBetween返回数值
为0;如果这两个日期在临近的年份,则YearsBetween函数返回数值为1。

●functionYearSpan(constANow,AThen:TDateTime):Double;

描述:
根据两个给定的TDateTime类型的参数ANow和AThen,YearsBetween函数能得到两个日期在年份
上差距数。因为年份的天数是不同的,所以YearsBetween函数返回的是一个近似值,该近似
值基于每年的天数为365.25天。与YearsBetween函数不同,YearsBetween函数将忽略掉不
足一年的数字,而YearSpan将计算不足一年的数字。
注意:该函数返回类型为Double


●functionYesterday:TDateTime;

描述:
Yesterday函数能得到当前日期的前一天的日期,返回数值中不包括时间部分。
例如:
当前日期是2003/3/19
则showmessage(datetimetostr(Yesterday));
将得到2003/3/18

☆日期的合成
●functionEncodeDate(Year,Month,Day:Word):TDateTime;

描述:
EncodeDate函数将根据参数年份、月份、日子而得到一个TDateTime类型的时间变量。

●functionEncodeDateDay(constAYear,ADayOfYear:Word):TDateTime;

描述:
EncodeDateDay将根据参数年份和天数,而得到一个TDateTime类型的时间变量。
其中AYear为1到9999。
ADayOfYear为日子在该年份顺序排列的天数,例如,1月1日时,ADayOfYear为1,
2月2日时,ADayOfYear为2,3月1日时,ADayOfYear为32。

●functionEncodeDateMonthWeek(constAYear,AMonth,AWeekOfMonth:Word;constADayOfWeek:Word=

1):TDateTime;

描述:
EncodeDateMonthWeek函数将根据参数年份、月份、星期数,星期几,来得到一个TDateTime类型
的时间变量。
其中AYear为1到9999。
其中AMonth为1到12。
AWeekOfMonth是在该月份的星期数,1表示第一个星期,可能包含4天或更多的天数。
注意,一个月的第一天如果是星期5,星期6或星期日,用表示这三天的AMonth数值必须设定
为上一个月份的数字,同时AWeekOfMonth要设为在上一个月所在的星期数。
同样,如果一个月的最后一天是星期1,星期2,或星期3,那么用表示这三天的AMonth数值
必须设定为下一个月份的数字,同时AWeekOfMonth为1。
ADayOfWeek表示星期几,星期一为1,星期二为2。

●functionEncodeDateTime(constAYear,AMonth,ADay,AHour,AMinute,ASecond,AMilliSecond:

Word):TDateTime;

描述:
EncodeDateTime根据参数年份、月份、日子、小时、分、秒、毫秒来得到一个TDateTime类型
日期时间。

●functionEncodeDateWeek(constAYear,AWeekOfYear:Word;constADayOfWeek:Word=1):TDateTime;

描述:

EncodeDateWeek根据参数年份、星期数、星期几来得到一个TDateTime类型日期时间。

AWeekOfYear是在该年份的星期数,1表示第一个星期,可能包含4天或更多的天数。
注意,一年的第一天如果是星期5,星期6或星期日,用表示这三天的AYear数值必须设定
为上一个年份的数字,同时AWeekOfYear要设为在上一个年所在的星期数。
同样,如果一年的最后一天是星期1,星期2,或星期3,那么用表示这三天的AYear数值
必须设定为下一个年份的数字,同时AWeekOfYear为1。
ADayOfWeek表示星期几,星期一为1,星期二为2。

●functionEncodeTime(Hour,Min,Sec,MSec:Word):TDateTime;

描述:
EncodeTime函数根据参数小时、分、秒、毫秒得到个一个TDateTime数值。

☆日期的分解

●procedureDecodeDate(Date:TDateTime;varYear,Month,Day:Word);

描述:
DecodeDate从一个TDateTime类型参数Date中分解出得到年份、月份、日子。

●procedureDecodeDateDay(constAValue:TDateTime;outAYear,ADayOfYear:Word);

描述:
DecodeDateDay方法会根据TDateTime类型参数AValue得到相应的年份和日期总数。
ADayOfYear:1月1日,此数值为1;1月2日,此数值为2。

●procedureDecodeDateMonthWeek(constAValue:TDateTime;outAYear,AMonth,AWeekOfMonth,

ADayOfWeek:Word);

描述:
DecodeDateMonthWeek方法根据TDateTime类型参数AValue得到相应的年份、月份、月份中的第几个
星期、星期几
AYear:年份
AMonth:月份,1到12
AWeekOfMonth:在该月份中的第几个星期
ADayOfWeek:星期几。星期一为1。

●procedureDecodeDateTime(constAValue:TDateTime;outAYear,AMonth,ADay,AHour,AMinute,

ASecond,AMilliSecond:Word);

描述:
DecodeDateTime方法根据TDateTime类型参数AValue得到相应的年份、月份、日子、小时、分、秒、
毫秒。

●procedureDecodeDateWeek(constAValue:TDateTime;outAYear,AWeekOfYear,ADayOfWeek:Word);

描述:
DecodeDateWeek方法根据TDateTime类型参数AValue得到相应的年份、在该年中的第几个星期、星期几。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值