在編寫應用程序時
我們需要經常與時間和日期打交道
因此經常需要一些對時間的控制技術
在Delphi中
提供了一整套對日期和時間的操作函數
在此
我將詳細介紹一下在Delphi中的時間操作技術
希望能對大家有所幫助
一Delphi中的用於表示時間的類型 首先
看一看在delphi中用於描述時間的幾種數據結構
對時間的操作
其實就是對這些結構的操作
1TDateTime類型
Delphi中最常用的表示日期時間的數據類型TDateTime類型和普通的整形數一樣你可以給日期定義一個日期型變量以便在程序中進行操作TdateTime類型實質上是一個Double型的數在Delphi中是這樣定義TdateTime類型 type TDateTime = type Double 具體的算法是用Double數的整數部分表示日期以年月日為基准點以天為單位進行加減如數字表示年月日數字表示年月日而小數部分則用來表示時間其值為欲表示的時間與一整天總時間的比值如早上點就是/=而早上:就是(*+)/(*)=
下面給出幾個例子說明TDateTime類型 與Double類型的交互關系
// ::
// ::
// ::
// ::
相信大家一定能自己理解TdateTime與Double之間的轉換方法因此從根本上對TDateTime的操作與Double完全一樣
2TTimeStamp 類型
這是一個用來描述日期與時間的一個結構類型在Delphi中是這樣定義的
type
TTimeStamp = record
Time: Integer; {從午夜點開始到指定時間的毫秒數 }
Date: Integer; {以本日為基准到指點日期的天數}
end;
和TDateTime相比可更直觀表示高精度的時間一般用於毫秒級的運算以及用於表示較長的時間
3PsystemTime 類型
一個用於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中相關函數
二用於時間操作的函數
1Date函數
定義Date: TDateTime;
作用返回當前的日期
范例CurrentDate := Date;
2DayOfWeek函數
定義function DayOfWeek(Date: TDateTime): Integer;
作用得到指定日期的星期值返回~代表周日到周六
3IncMouth函數
定義function IncMonth(const Date: TDateTime; NumberOfMonths: Integer): TDateTime;
作用求給定的日期Data在NumberOfMonths個月後的日期
范例Date := IncMonth(date);
如果今天是則Date就是
4IsLeapYear函數
定義function IsLeapYear(Year: Word): Boolean;
作用判斷指定的年份是否是閏年
范例if isLeapYear() then ShowMessage(該年是閏年);
5Now函數
定義function Now: TDateTime;
作用用於取得當前的日期時間
范例CurrentDateTime := Now;
6ReplaceDate 過程
定義procedure ReplaceDate(var DateTime: TDateTime; const NewDate: TDateTime);
作用使用參數Newdate日期部分替換參數DateTime的日期部分但不改變時間部分
7ReplaceDate 過程
定義procedure ReplaceTime(var DateTime: TDateTime; const NewTime: TDateTime);
作用使用參數Newdate時間部分替換參數DateTime的時間部分但不改變日期部分如果上述這兩個過程一起用就相當於賦值了
8Time函數
定義function Time: TDateTime;
作用返回當前的時間
范例CurrentTime := Time;
三各種時間類型之間的轉換函數
1DateTimeToFileDate函數
定義DateTimeToFileDate(DateTime: TDateTime): Integer;
作用 將一個TDateTime類型的時間轉化為Dos環境中的時間Dos環境下對時間的訪問方法和VCL中的TdateTime類型不一樣在進行文件操作時為了保持時間的一致性需要使用DateTimeToFileDate函數進行轉化 返回的Integer的值就是Dos下的用於描述時間的值
2DateTimeToSystemTime 過程
定義procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);
作用將一個TDateTime類型的時間轉換為Win API函數所使用的TSystemTime類型在使用WinApi函數操縱時間時用到
3SystemTimeToDateTime 函數
定義function SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTime;
作用將一個在WinApi函數中得到的TSysTemTime類型的數轉換為TDateTime類型
4DateTimeToTimeStamp 函數和TimeStampToDateTime 函數
定義DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
作用用於在TDataTime類型與TTimeStamp之間進行互相轉換TDataTime 用一個double描繪一個時間而TTimeStamp則是采用兩個整形數分別描述時間兩種類型的區別可參考文章開始處的數據類型描述部分
5EncodeDate 函數
定義function EncodeDate(Year Month Day: Word): TDateTime;
作用 輸入年(year)月(month)日(day)的值將該日期返回為TDateTime類型年的范圍為月份的范圍為日期的范圍視當月的情況而定如果輸入的值超出范圍則將產生一個EConvertError錯誤
6DecodeDate 過程
定義procedure DecodeDate(Date: TDateTime; var Year Month Day: Word);
作用輸入一個TDateTime類型的日期將其轉為年(Year)月(Month)日(Day)的值如果輸入值為或小於則年月日均為
7EncodeTime 函數
定義EncodeTime(Hour Min Sec MSec: Word): TDateTime;
作用輸入小時(Hour)分(min)秒(Sec)微秒(MSec)的值返回一個TDateTime類型的時間該值為一個介於至之間的小數Hour的取值范圍為Min的取值范圍為Sec的取值范圍為MSec的取值范圍為如果輸入值超出范圍則產生一個EConvertError 錯誤
8DecodeTime 過程
定義procedure DecodeTime(Time: TDateTime; var Hour Min Sec MSec: Word);
作用輸入一個時間將其轉換為小時(Hour)分(min)秒(Sec)微秒(MSec)的值
四TDateTime類型與字符串型轉換函數
1DateTimeToStr 函數DateToStr 函數和TimeToStr函數
定義function DateTimeToStr(DateTime: TDateTime): string;
function DateToStr(Time: TDateTime): string;
function TimeToStr(Time: TDateTime): string;
作用將一個TDateTime類型的數轉換成字符串DateTimeToStr轉換日期和時間DateToStr只轉換日期TimeToStr只轉換時間轉換後的輸出效果為YYYYMD HMS
2StrToDateTime函數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值就是 今天是yyyy年mm月dd日 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的聯機幫助本文介紹的大部分函數在聯機幫助中都有范例這裡就不一一列舉可參考聯機幫助希望本文能提高您操作時間技術方面的能力同時也為您在閱讀相關的聯機幫助時提供一些方便
From:http://tw.wingwit.com/Article/program/Delphi/201311/24980.html