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

function DateOf(const AValue: TDateTime): TDateTime;

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

●function DateTimeToStr(DateTime: TDateTime): string;

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

例如:
ShortDateFormat:='yyyy mm dd';
showmessage(DateTimetostr((now())));
你将得到:2003 03 19 10:50:49


●procedure DateTimeToString(var Result: string; const Format: string; DateTime: TDateTime);

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

例如: 
DateTimeToString(result,'yyyy mm dd',now());
那么 result的结果为:2003 03 19 10:50:49

●procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);

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

●function DateTimeToUnix(const AValue: TDateTime ): Int64;

描述:
使用 DateTimeToUnix 函数来将一个 TDateTime 型时间变量转换成一个相应的 Unix 格式
的日期和时间。
Unix date-and-time values are encoded as the number of seconds that have elapsed
since midnight at the start of January 1, 1970.


●function DateToStr(Date: TDateTime): string;

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

●function DayOf(const AValue: TDateTime): Word;

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

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

●function DayOfTheMonth(const AValue: TDateTime): Word;

与 DayOf 相同。

●function DayOfTheWeek(const AValue: TDateTime): Word;

描述:
对于给定的TDateTime类型的日期时间,使用 DayOfTheWeek 函数能得到该日期是该星期的
第几天。DayOfTheWeek 函数的返回数值为 1 到 7,其中 1 表示星期一,而 7 表示星期日。
注意:DayOfTheWeek 是 ISO 8601 标准的(此标准为 星期一是一周的第一天)。对于一周
的第一天是星期日的标准,如果想获得星期数,请使用 DayOfWeek 函数。
Tip: To make the return value more readable, use the Day of week constants.

●function DayOfTheYear(const AValue: TDateTime): Word;

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

●function DayOfWeek(Date: TDateTime): Integer;

Description

DayOfWeek returns the day of the week of the specified date as an integer between
1 and 7, where Sunday is the first day of the week and Saturday is the seventh.

Note: DayOfWeek is not compliant with the ISO 8601 standard, which defines Monday
as the first day of the week. For an ISO 8601 compliant version, use the DayOfTheWeek
function instead.

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

●function DaysBetween(const ANow, AThen: TDateTime): Integer;

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

●function DaysInAMonth(const AYear, AMonth: Word): Word;

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

●function DaysInAYear(const AYear: Word): Word;

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

●function DaysInMonth(const AValue: TDateTime): Word;

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

●function DaysInYear(const AValue: TDateTime): Word;

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

●function DaySpan(const ANow, AThen: TDateTime): Double;

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

☆ Month 开头的函数

●function MonthOf(const AValue: TDateTime): Word;

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

●function MonthOfTheYear(const AValue: TDateTime): Word;

与MonthOf函数相同。

●function MonthsBetween(const ANow, AThen: TDateTime): Integer;

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

●function MonthSpan(const ANow, AThen: TDateTime): Double;

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

●function MonthStr(DateTime: TDateTime): string;

Description

HTTP message headers permit several formats for the representation of date and time 
values. MonthStr converts a TDateTime value into a string representing the month. 
MonthStr allows server applications to work with date values taken from HTTP request 
messages, without worrying about the details of how they are formatted.

☆ Week 开头的函数

●function WeekOf(const AValue: TDateTime): Word;

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

●function WeeksInAYear(const AYear: Word): Word;

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

●function WeeksBetween(const ANow, AThen: TDateTime): Integer;

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

●function WeekSpan(const ANow, AThen: TDateTime): Double;

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

☆ Year 开头的函数

●function YearOf(const AValue: TDateTime): Word;

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

●function YearsBetween(const ANow, AThen: TDateTime): Integer;

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

●function YearSpan(const ANow, AThen: TDateTime): Double;

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


●function Yesterday: TDateTime;

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

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

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

●function EncodeDateDay(const AYear, ADayOfYear: Word): TDateTime;

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

●function EncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth: Word; const ADayOfWeek: 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。 

●function EncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: 

Word):TDateTime;

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

●function EncodeDateWeek(const AYear, AWeekOfYear: Word; const ADayOfWeek: Word = 1): TDateTime;

描述:

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

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

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

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

☆日期的分解

●procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);

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

●procedure DecodeDateDay(const AValue: TDateTime; out AYear, ADayOfYear: Word);

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

●procedure DecodeDateMonthWeek(const AValue: TDateTime; out AYear, AMonth, AWeekOfMonth, 

ADayOfWeek: Word);

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

●procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, 

ASecond, AMilliSecond: Word);

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

●procedure DecodeDateWeek(const AValue: TDateTime; out AYear, AWeekOfYear, ADayOfWeek: Word);

描述:
DecodeDateWeek方法根据TDateTime类型参数AValue 得到相应的年份、在该年中的第几个星期、星期几。

你可能感兴趣的:(Delphi 日期时间函数详解)