各種時間類型之間的轉換函數
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類型,年的范圍為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,如果輸入值超出范圍,則產生一個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 TimeToStr(Time: TDateTime): string;
function TimeToStr(Time: TDateTime): string;
作用:將一個TDateTime類型的數轉換成字符串,DateTimeToStr轉換日期和時間,DateToStr只轉換日期,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個數,則認為是指定了月份和日期,年份采用當前年份,
如果在區域設置中采用兩位年份的表示方法,則系統將會采用以下方法處理:
當前年份 | 起始年份 | 基準值 | 輸入年份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 |
首先在區域設置中取得兩位年份的起始年份,如在區域設置中設兩位年份范圍為1932-2031年,則起始年份為32年,如果這個起始年份為0,則認為兩位年份表示的都是本世紀,如果其實年份大于0 ,則采用當前年份減去起始年份的值,這個值稱為基準值,大于等于這個值則認為事本世紀,否則認為是下世紀,下面給出幾個例子說明:
DateTimeToString 過程:
FormatDateTime 函數:
定義:procedure DateTimeToString(var Result: string; const Format: string; DateTime: TDateTime);
function FormatDateTime(const Format: string; DateTime: TDateTime): string;
作用:通過定義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;
在使用兩位年份時的起始年份。