各种时间类型之间的转换函数
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得到相应的年份、在该年中的第几个星期、星期几。