delphi中的時間操作技術(2) (轉)

gugu99發表於2008-07-27
delphi中的時間操作技術(2) (轉)[@more@]

各種時間型別之間的轉換:namespace prefix = o ns = "urn:schemas--com::office" />

DateTimeToFileDate函式:

定義:DateTimeToFileDate(DateTime: TDateTime): Integer;

作用: 將一個TDateTime型別的時間轉化為Dos環境中的時間,Dos環境下對時間的訪問方法和VCL中的TdateTime型別不一樣,在進行操作時,為了保持時間的一致性,需要使用DateTimeToFileDate函式進行轉化,返回的Integer的值就是Dos下的用於描述時間的值。

DateTimeToSystemTime 過程:

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

作用:將一個TDateTime型別的時間轉換為Win 函式所使用的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: ): 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區域設定中的設定,其中HH,MM(小時,分鐘)必須新增,SS(秒)可選,也可以在後面加入 Am和Pm區分上下午,這時候將認為採用12小時表示法,否則認為採用24小時表示法。

  日期部分的格式要求符合Windows區域設定中的短日期格式,也是由2~3個的數值字串構成,如果在字串中只有2個數,則認為是指定了月份和日期,年份採用當前年份,

  如果在區域設定中採用兩位年份的表示方法,則系統將會採用以下方法處理:

當前年份

起始年份

基準值

輸入年份03

輸入年份50

輸入年份68

1998

0

1900

1903

1950

1968

2002

0

2000

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點。

 

與時間相關的變數:

封裝了區域設定的各種資訊,並以此定義了一系列的變數,下面介紹與時間相關的部分變數:

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;

在使用兩位年份時的起始年份。

好了,delphi中關於時間操作的部分基本講完了,在Delphi6中還提供了一些新的操作函式,不過都比較簡單,相信大家看幫助都能看懂,至於對於時間的一些操作技巧,相信看完了本文大家都能有一些,這裡就不詳細描述,同一種功能本來就應該有多種的實現方法。本文在寫作中主要參考了delphi5的聯機幫助,本文介紹的大部分函式在聯機幫助中都有範例,這裡就不一一列舉,可參考聯機幫助,希望本文能提高您操作時間技術方面的能力,同時也為您在閱讀相關的聯機幫助時提供一些方便。

 

目前我正在搞Delphi函式中文化的網站,有興趣的朋友可以訪問Http://www.Togetherdev.com


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1007906/,如需轉載,請註明出處,否則將追究法律責任。

相關文章