Delphi中對(duì)時(shí)間操作方法匯總
一般來(lái)說在delphi中用于描述時(shí)間的有幾種數(shù)據(jù)結(jié)構(gòu),而對(duì)時(shí)間的操作,實(shí)質(zhì)上就是對(duì)這些結(jié)構(gòu)的操作。
TDateTime類型:
Delphi中最常用的表示日期時(shí)間的數(shù)據(jù)類型TDateTime類型,和普通的整形數(shù)一樣,你可以給日期定義一個(gè)日期型變量以便在程序中進(jìn)行操作。TdateTime類型實(shí)質(zhì)上是一個(gè)Double型的數(shù),在Delphi中是這樣定義TdateTime類型: type TDateTime = type Double ,具體的算法是用Double數(shù)的整數(shù)部分表示日期,以1989年12月30日為基準(zhǔn)點(diǎn),以天為單位進(jìn)行加減,如數(shù)字1表示1900年1月1日,數(shù)字-1表示1989年12月29日。而小數(shù)部分則用來(lái)表示時(shí)間,其值為欲表示的時(shí)間與一整天總時(shí)間的比值,如早上6點(diǎn)就是6/24=0.25,而早上6:15就是(6*60+15)/(24*60)=0.2604166666666666666666666666667,下面,給出幾個(gè)例子說明TDateTime類型 與Double類型的交互關(guān)系
0 12/30/1899 00:00:00
2.75 1/1/1900 18:00:00
-1.25 12/29/1899 6:00:00
35065 1/1/1996 00:00:00
相信大家一定能自己理解TdateTime與Double之間的轉(zhuǎn)換方法,因此,從根本上對(duì)TDateTime的操作與Double完全一樣。
TTimeStamp 類型:
這是一個(gè)用來(lái)描述日期與時(shí)間的一個(gè)結(jié)構(gòu)類型,在Delphi中是這樣定義的:
type TTimeStamp = record Time: Integer; {從午夜0點(diǎn)開始到指定時(shí)間的毫秒數(shù) } Date: Integer; {以本日為基準(zhǔn)到指點(diǎn)日期的天數(shù)} end;
和TDateTime相比,可更直觀表示高精度的時(shí)間,一般用于毫秒級(jí)的運(yùn)算以及用于表示較長(zhǎng)的時(shí)間。
PsystemTime 類型:
一個(gè)用于WinApi中對(duì)時(shí)間操作的指針型結(jié)構(gòu)。他的定義為:
type PSystemTime = ^TSystemTime; TSystemTime = record wYear: Word; wMonth: Word; wDayOfWeek: Word; wDay: Word; wHour: Word; wMinute: Word; wSecond: Word; wMilliseconds: Word; end;
這個(gè)結(jié)構(gòu)多用于調(diào)用WinApi操作時(shí)使用。
在了解了各種時(shí)間類型的本質(zhì)后,相信大家都有一套操作這些類型的時(shí)間的想法,不過在Delphi中還提供了一整套用于操作時(shí)間的過程函數(shù),這些過程和函數(shù)都定義在SysUnit這個(gè)單元中,現(xiàn)在就向大家介紹Delphi中相關(guān)函數(shù):
用于時(shí)間操作的函數(shù)
Date函數(shù):
定義:Date: TDateTime;
作用:返回當(dāng)前的日期
范例:
CurrentDate := Date;
DayOfWeek函數(shù):
定義:function DayOfWeek(Date: TDateTime): Integer;
作用:得到指定日期的星期值,返回1~7,代表周日到周六。
IncMouth函數(shù):
定義:function IncMonth(const Date: TDateTime; NumberOfMonths: Integer): TDateTime;
作用:求給定的日期Data在NumberOfMonths個(gè)月后的日期。
范例:
Date1 := IncMonth(date,10);
如果今天是2002-5-3,則Date1就是2003-3-3
IsLeapYear函數(shù):
定義:function IsLeapYear(Year: Word): Boolean;
作用:判斷指定的年份是否是閏年;
范例:
if isLeapYear(2000) then ShowMessage(‘該年是閏年');
Now函數(shù):
定義:function Now: TDateTime;
作用:用于取得當(dāng)前的日期時(shí)間
范例:
CurrentDateTime := Now;
ReplaceDate 過程
定義:procedure ReplaceDate(var DateTime: TDateTime; const NewDate: TDateTime);
作用:使用參數(shù)Newdate日期部分替換參數(shù)DateTime的日期部分,但不改變時(shí)間部分。
ReplaceDate 過程
定義:procedure ReplaceTime(var DateTime: TDateTime; const NewTime: TDateTime);
作用:使用參數(shù)Newdate時(shí)間部分替換參數(shù)DateTime的時(shí)間部分,但不改變?nèi)掌诓糠帧?
如果上述這兩個(gè)過程一起用,就相當(dāng)于賦值了。
Time函數(shù):
定義:function Time: TDateTime;
作用:返回當(dāng)前的時(shí)間
范例:
CurrentTime := Time;
各種時(shí)間類型之間的轉(zhuǎn)換函數(shù)
DateTimeToFileDate函數(shù):
定義:DateTimeToFileDate(DateTime: TDateTime): Integer;
作用:將一個(gè)TDateTime類型的時(shí)間轉(zhuǎn)化為Dos環(huán)境中的時(shí)間,Dos環(huán)境下對(duì)時(shí)間的訪問方法和VCL中的TdateTime類型不一樣,在進(jìn)行文件操作時(shí),為了保持時(shí)間的一致性,需要使用DateTimeToFileDate函數(shù)進(jìn)行轉(zhuǎn)化, 返回的Integer的值就是Dos下的用于描述時(shí)間的值。
DateTimeToSystemTime 過程:
定義:procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);
作用:將一個(gè)TDateTime類型的時(shí)間轉(zhuǎn)換為Win API函數(shù)所使用的TSystemTime類型,在使用WinApi函數(shù)操縱時(shí)間時(shí)用到。
SystemTimeToDateTime 函數(shù):
定義:function SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTime;
作用:將一個(gè)在WinApi函數(shù)中得到的TSysTemTime類型的數(shù)轉(zhuǎn)換為TDateTime類型。
DateTimeToTimeStamp 函數(shù):
TimeStampToDateTime 函數(shù):
定義:DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
作用:用于在TDataTime類型與TTimeStamp之間進(jìn)行互相轉(zhuǎn)換。TDataTime 用一個(gè)double描繪一個(gè)時(shí)間,而TTimeStamp則是采用兩個(gè)整形數(shù)分別描述時(shí)間。兩種類型的區(qū)別可參考文章開始處的數(shù)據(jù)類型描述部分。
EncodeDate 函數(shù):
定義:function EncodeDate(Year, Month, Day: Word): TDateTime;
作用: 輸入年(year),月(month),日(day)的值,將該日期返回為TDateTime類型,年的范圍為1-9999,月份的范圍為1-12,日期的范圍視當(dāng)月的情況而定,如果輸入的值超出范圍,則將產(chǎn)生一個(gè)EConvertError錯(cuò)誤。
DecodeDate 過程:
定義:procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);
作用:輸入一個(gè)TDateTime類型的日期,將其轉(zhuǎn)為年(Year),月(Month),日(Day)的值。如果輸入值為0或小于0,則年月日均為0,
EncodeTime 函數(shù):
定義:EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;
作用:輸入小時(shí)(Hour),分(min),秒(Sec),微秒(MSec)的值,返回一個(gè)TDateTime類型的時(shí)間,該值為一個(gè)介于0至1之間的小數(shù)。Hour的取值范圍為0-23,Min的取值范圍為0-59,Sec的取值范圍為0-59,MSec的取值范圍為0-999,如果輸入值超出范圍,則產(chǎn)生一個(gè)EConvertError 錯(cuò)誤。
DecodeTime 過程:
定義:procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);
作用:輸入一個(gè)時(shí)間,將其轉(zhuǎn)換為小時(shí)(Hour),分(min),秒(Sec),微秒(MSec)的值。
TDateTime類型與字符串型轉(zhuǎn)換函數(shù):
DateTimeToStr 函數(shù):
DateToStr 函數(shù)
TimeToStr函數(shù)
定義:function DateTimeToStr(DateTime: TDateTime): string;
function TimeToStr(Time: TDateTime): string;
function TimeToStr(Time: TDateTime): string;
作用:將一個(gè)TDateTime類型的數(shù)轉(zhuǎn)換成字符串,DateTimeToStr轉(zhuǎn)換日期和時(shí)間,DateToStr只轉(zhuǎn)換日期,TimeToStr只轉(zhuǎn)換時(shí)間。轉(zhuǎn)換后的輸出效果為YYYY-M-D H:M:S
StrToDateTime函數(shù)
StrToDate函數(shù)
StrToTime函數(shù)
定義:function StrToDateTime(const S: string): TDateTime;
function StrToDate(const S: string): TDateTime;
function StrToTime(const S: string): TDateTime;
作用:將帶有日期時(shí)間格式的字符串轉(zhuǎn)化成TDateTime,其中S必須是一個(gè)有效的字符串,如
YY-MM-DD HH:MM:SS格式,否則就會(huì)觸發(fā)EConvertError事件,提示錯(cuò)誤信息。
時(shí)間部分的字符串必須是由2~3個(gè)的數(shù)值字串構(gòu)成,并且采用在Windows區(qū)域設(shè)置中設(shè)置的分隔字符進(jìn)行分隔,其格式要求符合在Windows區(qū)域設(shè)定中的設(shè)定,其中HH,MM(小時(shí),分鐘)必須添加,SS(秒)可選,也可以在后面加入 Am和Pm區(qū)分上下午,這時(shí)候系統(tǒng)將認(rèn)為采用12小時(shí)表示法,否則認(rèn)為采用24小時(shí)表示法。
日期部分的格式要求符合Windows區(qū)域設(shè)置中的短日期格式,也是由2~3個(gè)的數(shù)值字串構(gòu)成,如果在字符串中只有2個(gè)數(shù),則認(rèn)為是指定了月份和日期,年份采用當(dāng)前年份,
如果在區(qū)域設(shè)置中采用兩位年份的表示方法,則系統(tǒng)將會(huì)采用以下方法處理:
當(dāng)前年份 起始年份 基準(zhǔn)值 輸入年份03 輸入年份50 輸入年份68
1998 0 1900 1903 1950 1968
2002 0 2000 2003 2050 2068
1998 50 1948 2003 1950 1968
2000 50 1950 2003 1950 1968
2002 50 1952 2003 2050 1968
2020 50 1970 2003 2050 2068
2020 10 2010 2103 2050 2068
首先在區(qū)域設(shè)置中取得兩位年份的起始年份,如在區(qū)域設(shè)置中設(shè)兩位年份范圍為1932-2031年,則起始年份為32年,如果這個(gè)起始年份為0,則認(rèn)為兩位年份表示的都是本世紀(jì),如果其實(shí)年份大于0 ,則采用當(dāng)前年份減去起始年份的值,這個(gè)值稱為基準(zhǔn)值,大于等于這個(gè)值則認(rèn)為事本世紀(jì),否則認(rèn)為是下世紀(jì),下面給出幾個(gè)例子說明:
DateTimeToString 過程:
FormatDateTime 函數(shù):
定義:procedure DateTimeToString(var Result: string; const Format: string; DateTime: TDateTime);
function FormatDateTime(const Format: string; DateTime: TDateTime): string;
作用:通過定義Format字串中的格式得到要輸出時(shí)間字符串,例如要輸出“今天是2002年5月5日,星期五”就可以用這兩種方法,這兩個(gè)方法的作用相同,只是一個(gè)是通過共享變量取得輸出字符串,值在Result中,一個(gè)是通過返回值取得輸出字符串,DateTime參數(shù)是希望輸出的日期值,F(xiàn)ormat由格式標(biāo)志與附加字符串組合而成。附加字串用””圈起,就像C中的Printf函數(shù).如“今天是2002年5月5日,星期五”的Format值就是 ‘”今天是”yyyy”年”mm”月”dd”日,” dddd',yyyy,mm,dd,dddd都是格式標(biāo)識(shí),各種格式標(biāo)識(shí)的解釋如下:
d :用一位或兩位整數(shù)顯示日子(1-31)
dd :用兩位整數(shù)顯示日子,不足兩位的用0補(bǔ)足(01-31)
ddd :按縮略方式顯示當(dāng)前的星期號(hào),如果Windows是英文版,則顯示為Mon-Sun,如果是中文版,則顯示同dddd。
dddd :按完整方式顯示當(dāng)前的星期號(hào),如Windows是英文版,則顯示Monday-SumDay,如果是中文版,則顯示星期一~星期日
ddddd :按區(qū)域設(shè)置中的短日期格式輸出。
dddddd :按區(qū)域設(shè)置中的長(zhǎng)日期格式輸出。
m :用一位或兩位整數(shù)顯示月份(1-12)
mm :用兩位整數(shù)顯示月份,不足兩位的用0補(bǔ)足(01-12)
mmm :使用縮略方式顯示月份名稱,英文版顯示為Jan-Dec,中文版同mmmm
mmmm :使用完整方式顯示月份名稱,英文版顯示為January-December,中文版為一月~十二月
yy :按兩位整數(shù)方式顯示年份(00-99)
yyyy :按四位整數(shù)方式顯示年份(0000-9999)
h :用一位或兩位整數(shù)顯示小時(shí)(0-23)
hh :用兩位整數(shù)顯示小時(shí),不足兩位的用0補(bǔ)足(00-23)
n :用一位或兩位整數(shù)顯示分鐘(0-60)
nn :用兩位整數(shù)顯示分鐘,不足兩位的用0補(bǔ)足(00-60)
s :用一位或兩位整數(shù)顯示秒數(shù)(0-60)
ss :用兩位整數(shù)顯示秒數(shù),不足兩位的用0補(bǔ)足(00-60)
z :用一位至兩位整數(shù)顯示毫秒數(shù)(0-999)
zzz :用三位整數(shù)顯示毫秒數(shù),不足三位的用0補(bǔ)足(000-999)
tt :按照區(qū)域設(shè)置中的格式顯示日期
am/pm :用于12小時(shí)制的顯示,帶有AM的則表示從0點(diǎn)~12點(diǎn),pm代表從12點(diǎn)~0點(diǎn)。
與時(shí)間相關(guān)的變量:
Delphi封裝了區(qū)域設(shè)置的各種信息,并以此定義了一系列的變量,下面介紹與時(shí)間相關(guān)的部分變量:
DateSeparator :Char
日期分隔符,用于分隔年月日
TimeSeparator :Char
時(shí)間分隔符,用于分隔小時(shí),分鐘,秒
ShortDateFormat:String
區(qū)域設(shè)置中短日期格式的定義。
LongDateFormat :String
區(qū)域設(shè)置中長(zhǎng)日期格式的定義。
ShortTimeFormat:String
區(qū)域設(shè)置中短時(shí)間格式的定義。
LongTimeFormat :String
區(qū)域設(shè)置中長(zhǎng)時(shí)間格式的定義。
TimeAMString :String
用來(lái)表示上午的字符串
TimePMString :String
用來(lái)表示下午的字符串
ShortMonthNames:array[1..12] of String;
用于縮略表示月份名稱的數(shù)組,就是在使用FormatDateTime時(shí)顯示的mmm標(biāo)識(shí)的字符串
LongMonthNames:array[1..12] of String;
用于完整表示月份名稱的數(shù)組,就是在使用FormatDateTime時(shí)顯示的mmmm標(biāo)識(shí)的字符串
ShortDayNames :array[1..7] of String;
用于縮略表示星期名稱的數(shù)組,就是在使用FormatDateTime時(shí)顯示的ddd標(biāo)識(shí)的字符串
LongDayNames :array[1..7] of String;
用于完整表示星期名稱的數(shù)組,就是在使用FormatDateTime時(shí)顯示的ddd標(biāo)識(shí)的字符串
TwoDigitYearCenturyWindow:Word = 50;
在使用兩位年份時(shí)的起始年份。
好了,至此delphi中關(guān)于時(shí)間操作的部分基本講完了,讀者在實(shí)際編程運(yùn)用的時(shí)候還可根據(jù)自身需要查看相應(yīng)的幫助文件解決遇到的問題。
上一篇:Delphi實(shí)現(xiàn)圖片滾動(dòng)切換的完整實(shí)例代碼
欄 目:Delphi
下一篇:Delphi之Pascal語(yǔ)言中的關(guān)鍵字及保留字匯總
本文標(biāo)題:Delphi中對(duì)時(shí)間操作方法匯總
本文地址:http://mengdiqiu.com.cn/a1/Delphi/8625.html
您可能感興趣的文章
- 01-10在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中存取圖像的圖文演示無(wú)錯(cuò)
- 01-10delphi建立、讀取、存貯INI文件的方法《三》
- 01-10Delphi Command模式
- 01-10delphi 正弦曲線圖
- 01-10delphi建立、讀取、存貯INI文件的方法《二》
- 01-10插件管理框架 for Delphi(二)
- 01-10插件管理框架 for Delphi(一)
- 01-10Delphi中判斷文件是否為文本文件的函數(shù)
- 01-10delphi中一個(gè)值得大家來(lái)考慮的DLL問題
- 01-10初探Delphi中的插件編程


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中存取圖像的圖
- 01-10delphi建立、讀取、存貯INI文件的方法
- 01-10delphi 正弦曲線圖
- 01-10Delphi Command模式
- 01-10delphi建立、讀取、存貯INI文件的方法
- 01-10插件管理框架 for Delphi(二)
- 01-10插件管理框架 for Delphi(一)
- 01-10Delphi中判斷文件是否為文本文件的函
- 01-10delphi中一個(gè)值得大家來(lái)考慮的DLL問題
- 01-10初探Delphi中的插件編程
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載