其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

Delphi中的时间操作技术


发布日期:2023年08月19日
 
Delphi中的时间操作技术
在编写应用程序时我们需要经常与时间和日期打交道因此经常需要一些对时间的控制技术在Delphi中提供了一整套对日期和时间的操作函数在此我将详细介绍一下在Delphi中的时间操作技术希望能对大家有所帮助

Delphi中的用于表示时间的类型

首先看一看在delphi中用于描述时间的几种数据结构对时间的操作其实就是对这些结构的操作

TDateTime类型

Delphi中最常用的表示日期时间的数据类型TDateTime类型和普通的整形数一样你可以给日期定义一个日期型变量以便在程序中进行操作TdateTime类型实质上是一个Double型的数在Delphi中是这样定义TdateTime类型 type TDateTime = type Double 具体的算法是用Double数的整数部分表示日期日为基准点以天为单位进行加减如数字表示数字表示而小数部分则用来表示时间其值为欲表示的时间与一整天总时间的比值如早上点就是/=而早上:就是(*+)/(*)=

下面给出几个例子说明TDateTime类型 与Double类型的交互关系

// ::

  // ::

// ::

// ::

相信大家一定能自己理解TdateTime与Double之间的转换方法因此从根本上对TDateTime的操作与Double完全一样

TTimeStamp 类型

这是一个用来描述日期与时间的一个结构类型在Delphi中是这样定义的

type

TTimeStamp = record

Time: Integer; {从午夜点开始到指定时间的毫秒数 }

Date: Integer; {以本日为基准到指点日期的天数}

end;

和TDateTime相比可更直观表示高精度的时间一般用于毫秒级的运算以及用于表示较长的时间

PsystemTime 类型

一个用于WinApi中对时间操作的指针型结构他的定义为

type

PSystemTime = ^TSystemTime;

TSystemTime = record

wYear: Word;

wMonth: Word;

wDayOfWeek: Word;

wDay: Word;

wHour: Word;

wMinute: Word;

wSecond: Word;

wMilliseconds: Word;

end;

这个结构多用于调用WinApi操作时使用

在了解了各种时间类型的本质后相信大家都有一套操作这些类型的时间的想法不过在Delphi中还提供了一整套用于操作时间的过程函数这些过程和函数都定义在SysUnit这个单元中现在就向大家介绍Delphi中相关函数

用于时间操作的函数

Date函数

定义Date: TDateTime;

作用返回当前的日期

范例CurrentDate := Date;

DayOfWeek函数

定义function DayOfWeek(Date: TDateTime): Integer;

作用得到指定日期的星期值返回代表周日到周六

IncMouth函数

定义function IncMonth(const Date: TDateTime; NumberOfMonths: Integer): TDateTime;

作用求给定的日期Data在NumberOfMonths个月后的日期

范例Date := IncMonth(date);

如果今天是则Date就是

IsLeapYear函数

定义function IsLeapYear(Year: Word): Boolean;

作用判断指定的年份是否是闰年

范例if isLeapYear() then ShowMessage(该年是闰年);

Now函数

定义function Now: TDateTime;

作用用于取得当前的日期时间

范例CurrentDateTime := Now;

ReplaceDate 过程

定义procedure ReplaceDate(var DateTime: TDateTime; const NewDate: TDateTime);

作用使用参数Newdate日期部分替换参数DateTime的日期部分但不改变时间部分

ReplaceDate 过程

定义procedure ReplaceTime(var DateTime: TDateTime; const NewTime: TDateTime);

作用使用参数Newdate时间部分替换参数DateTime的时间部分但不改变日期部分如果上述这两个过程一起用就相当于赋值了

Time函数

定义function Time: TDateTime;

作用返回当前的时间

范例CurrentTime := Time;

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

DateTimeToFileDate函数

定义DateTimeToFileDate(DateTime: TDateTime): Integer;

作用 将一个TDateTime类型的时间转化为Dos环境中的时间Dos环境下对时间的访问方法和VCL中的TdateTime类型不一样在进行文件操作时为了保持时间的一致性需要使用DateTimeToFileDate函数进行转化 返回的Integer的值就是Dos下的用于描述时间的值

DateTimeToSystemTime 过程

定义procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);

作用将一个TDateTime类型的时间转换为Win API函数所使用的TSystemTime类型在使用WinApi函数操纵时间时用到

SystemTimeToDateTime 函数

定义function SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTime;

作用将一个在WinApi函数中得到的TSysTemTime类型的数转换为TDateTime类型

DateTimeToTimeStamp 函数和TimeStampToDateTime 函数

定义DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;

function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;

作用用于在TDataTime类型与TTimeStamp之间进行互相转换TDataTime 用一个double描绘一个时间而TTimeStamp则是采用两个整形数分别描述时间两种类型的区别可参考文章开始处的数据类型描述部分

EncodeDate 函数

定义function EncodeDate(Year Month Day: Word): TDateTime;

作用 输入年(year)月(month)日(day)的值将该日期返回为TDateTime类型年的范围为月份的范围为日期的范围视当月的情况而定如果输入的值超出范围则将产生一个EConvertError错误

DecodeDate 过程

定义procedure DecodeDate(Date: TDateTime; var Year Month Day: Word);

作用输入一个TDateTime类型的日期将其转为年(Year)月(Month)日(Day)的值如果输入值为或小于则年月日均为

EncodeTime 函数

定义EncodeTime(Hour Min Sec MSec: Word): TDateTime;

作用输入小时(Hour)分(min)秒(Sec)微秒(MSec)的值返回一个TDateTime类型的时间该值为一个介于之间的小数Hour的取值范围为Min的取值范围为Sec的取值范围为MSec的取值范围为如果输入值超出范围则产生一个EConvertError 错误

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 DateToStr(Time: TDateTime): string;

function TimeToStr(Time: TDateTime): string;

作用将一个TDateTime类型的数转换成字符串DateTimeToStr转换日期和时间DateToStr只转换日期TimeToStr只转换时间转换后的输出效果为YYYYMD HMS

StrToDateTime函数StrToDate函数和StrToTime函数

定义function StrToDateTime(const S: string): TDateTime;

function StrToDate(const S: string): TDateTime;

function StrToTime(const S: string): TDateTime;

作用将带有日期时间格式的字符串转化成TDateTime其中S必须是一个有效的字符串

YYMMDD HH:MM:SS格式否则就会触发EConvertError事件提示错误信息

时间部分的字符串必须是由个的数值字串构成并且采用在Windows区域设置中设置的分隔字符进行分隔其格式要求符合在Windows区域设定中的设定其中HHMM(小时分钟)必须添加SS(秒)可选也可以在后面加入 Am和Pm区分上下午这时候系统将认为采用小时表示法否则认为采用小时表示法

日期部分的格式要求符合Windows区域设置中的短日期格式也是由个的数值字串构成如果在字符串中只有个数则认为是指定了月份和日期年份采用当前年份如果在区域设置中采用两位年份的表示方法则系统将会采用以下方法处理

当前年份起始年份基准值输入年份输入年份输入年份

首先在区域设置中取得两位年份的起始年份如在区域设置中设两位年份范围为则起始年份为如果这个起始年份为则认为两位年份表示的都是本世纪如果其实年份大于 则采用当前年份减去起始年份的值这个值称为基准值大于等于这个值则认为事本世纪否则认为是下世纪下面给出几个例子说明

DateTimeToString 过程FormatDateTime 函数

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

function FormatDateTime(const Format: string; DateTime: TDateTime): string;

作用通过定义Format字串中的格式得到要输出时间字符串例如要输出今天是星期五就可以用这两种方法这两个方法的作用相同只是一个是通过共享变量取得输出字符串值在Result中一个是通过返回值取得输出字符串DateTime参数是希望输出的日期值Format由格式标志与附加字符串组合而成附加字串用圈起就像C中的Printf函数今天是星期五的Format值就是 今天是yyyymmdd ddddyyyymmdddddd都是格式标识各种格式标识的解释如下

d 用一位或两位整数显示日子(

dd 用两位整数显示日子不足两位的用补足(

ddd 按缩略方式显示当前的星期号如果Windows是英文版则显示为Mon-Sun如果是中文版则显示同dddd

dddd 按完整方式显示当前的星期号如Windows是英文版则显示Monday-SumDay如 果是中文版则显示星期一~星期日

ddddd 按区域设置中的短日期格式输出

dddddd 按区域设置中的长日期格式输出

m 用一位或两位整数显示月份(

mm 用两位整数显示月份不足两位的用补足(

mmm 使用缩略方式显示月份名称英文版显示为JanDec中文版同mmmm

mmmm 使用完整方式显示月份名称英文版显示为JanuaryDecember中文版为一月~十二月

yy 按两位整数方式显示年份(

yyyy 按四位整数方式显示年份(

h 用一位或两位整数显示小时(

hh 用两位整数显示小时不足两位的用补足(

n 用一位或两位整数显示分钟(

nn 用两位整数显示分钟不足两位的用补足(

s 用一位或两位整数显示秒数(

ss 用两位整数显示秒数不足两位的用补足(

z 用一位至两位整数显示毫秒数(

zzz 用三位整数显示毫秒数不足三位的用补足(

tt 按照区域设置中的格式显示日期

am/pm 用于小时制的显示带有AM的则表示从点~pm代表从点~

与时间相关的变量

Delphi封装了区域设置的各种信息并以此定义了一系列的变量下面介绍与时间相关的部分变量

* DateSeparator Char

日期分隔符用于分隔年月日

* TimeSeparator Char

时间分隔符用于分隔小时分钟

* ShortDateFormatString

区域设置中短日期格式的定义

* LongDateFormat String

区域设置中长日期格式的定义

* ShortTimeFormatString

区域设置中短时间格式的定义

* LongTimeFormat String

区域设置中长时间格式的定义

* TimeAMString String

用来表示上午的字符串

* TimePMString String

用来表示下午的字符串

* ShortMonthNamesarray[] of String;

用于缩略表示月份名称的数组就是在使用FormatDateTime时显示的mmm标识的字符串

* LongMonthNamesarray[] of String;

用于完整表示月份名称的数组就是在使用FormatDateTime时显示的mmmm标识的字符串

* ShortDayNames array[] of String;

用于缩略表示星期名称的数组就是在使用FormatDateTime时显示的ddd标识的字符串

* LongDayNames array[] of String;

用于完整表示星期名称的数组就是在使用FormatDateTime时显示的ddd标识的字符串

* TwoDigitYearCenturyWindowWord = ;

在使用两位年份时的起始年份

好了delphi中关于时间操作的部分基本讲完了在Delphi中还提供了一些新的操作函数不过都比较简单相信大家看帮助都能看懂至于对于时间的一些操作技巧相信看完了本文大家都能有一些这里就不详细描述同一种功能本来就应该有多种的实现方法本文在写作中主要参考了delphi的联机帮助本文介绍的大部分函数在联机帮助中都有范例这里就不一一列举可参考联机帮助希望本文能提高您操作时间技术方面的能力同时也为您在阅读相关的联机帮助时提供一些方便

               

上一篇:利用Delphi开发旅游景点微机售票系统

下一篇:Delphi for Linux中应用共享对象库