各種時間類型之間的轉換函數 DateTimeToFileDate函數: 定義:DateTimeToFileDate(DateTime: TDateTime): Integer; 作用: 將一個TDateTime類型的時間轉化為Dos環境中的時間,Dos環境下對時間的訪問 方法和VCL中的TdateTime類型不一樣,在進行文件操作時,為了保持時間的一致性,需 要使用DateTimeToFileDate函數進行轉化,返回的Integer的值就是Dos下的用於描述時 間的值。 DateTimeToSystemTime 過程: 定義:procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TS ystemTime); 作用:將一個TDateTime類型的時間轉換為Win API函數所使用的TSystemTime類型,在使 用WinApi函數操縱時間時用到。 SystemTimeToDateTime 函數: 定義:function SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTim e; 作用:將一個在WinApi函數中得到的TSysTemTime類型的數轉換為TDateTime類型。 DateTimeToTimeStamp 函數: TimeStampToDateTime 函數: 定義:DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp; function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime; 作用:用於在TDataTime類型與TTimeStamp之間進行互相轉換。TDataTime 用一個doubl e描繪一個時間,而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,如果輸入值超出范圍,則產生一個EC onvertError 錯誤。 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轉換日期和時間,Date ToStr只轉換日期,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個數,則認為是指定了月份和日期,年份采用當前年份 , 如果在區域設置中采用兩位年份的表示方法,則系統將會采用以下方法處理: 首先在區域設置中取得兩位年份的起始年份,如在區域設置中設兩位年份范圍為 1932-2031年,則起始年份為32年,如果這個起始年份為0,則認為兩位年份表示的都是 本世紀,如果其實年份大於0 ,則采用當前年份減去起始年份的值,這個值稱為基准值 ,大於等於這個值則認為事本世紀,否則認為是下世紀,下面給出幾個例子說明: DateTimeToString 過程: FormatDateTime 函數: 定義:procedure DateTimeToString(var Result: string; const Format: string; D ateTime: TDateTime); function FormatDateTime(const Format: string; DateTime: TDateTime): s tring; 作用:通過定義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; 在使用兩位年份時的起始年份。 Day 開頭的函數 ● Unit DateUtils function DateOf(const AValue: TDateTime): TDateTime; 描述 使用 DateOf 函數用來把一個 TDateTime 類型的變量轉變成一個 只帶有日期的 TDateTime 類型變量。 例如: showmessage(DateTimetostr(dateof(now()))); 你得到的是 2003/03/19 而 showmessage(DateTimetostr((now()))); 得到的是 2003/03/19 10:50:49 ●function DateTimeToStr(DateTime: TDateTime): string; 描述 DateTimeToString 函數將 TDateTime 類型的參數 DateTime 轉換成一個 字符串,使用給定的全局變量 ShortDateFormat 的格式,時間部分按照 給定的全局變量 LongTimeFormat 的格式。 其中 DateTime 為零的部分將不會顯示出來。 例如: ShortDateFormat:='yyyy mm dd'; showmessage(DateTimetostr((now()))); 你將得到:2003 03 19 10:50:49 ●procedure DateTimeToString(var Result: string; const Format: string; DateTime: TDateTime); 描述: DateTimeToString 方法將TDateTime類型的參數DateTime 按照由參數Format提供的格式 轉化成字符串,並保存在Result中。 對於Format的格式類型,請看 Date-Time format strings 的幫助。 例如: DateTimeToString(result,'yyyy mm dd',now()); 那麼 result的結果為:2003 03 19 10:50:49 ●procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime); 描述: 有時為了調用API函數來使用系統時間,你可以使用 DateTimeToSystemTime 方法,來將一個 TDateTime 類型的時間變量轉換成一個 TSystemTime 類型的 系統時間。 ●function DateTimeToUnix(const AValue: TDateTime ): Int64; 描述: 使用 DateTimeToUnix 函數來將一個 TDateTime 型時間變量轉換成一個相應的 Unix 格式 的日期和時間。 Unix date-and-time values are encoded as the number of seconds that have elapsed since midnight at the start of January 1, 1970. ●function DateToStr(Date: TDateTime): string; 描述: 使用 DateToStr 函數能得到 TDateTime 日期時間類型的日期部分。日期的轉換格式依賴於 全局變量 ShortDateFormat。 ●function DayOf(const AValue: TDateTime): Word; 描述: 對於給定的TDateTime類型的日期時間,使用 DayOf 函數能得到該日期是該月份的第幾天。 該函數的返回數值在 1 到 31 之間 注意:DayOf 函數得到的結果與 DayOfTheMonth 相同。 例如: showmessage(inttostr(dayof(now))); 得到的是:19 (今天是 某月19日) ●function DayOfTheMonth(const AValue: TDateTime): Word; 與 DayOf 相同。 ●function DayOfTheWeek(const AValue: TDateTime): Word; 描述: 對於給定的TDateTime類型的日期時間,使用 DayOfTheWeek 函數能得到該日期是該星期的 第幾天。DayOfTheWeek 函數的返回數值為 1 到 7,其中 1 表示星期一,而 7 表示星期日。 注意:DayOfTheWeek 是 ISO 8601 標准的(此標准為 星期一是一周的第一天)。對於一周 的第一天是星期日的標准,如果想獲得星期數,請使用 DayOfWeek 函數。 Tip: To make the return value more readable, use the Day of week constants. ●function DayOfTheYear(const AValue: TDateTime): Word; 描述: 根據給定的日期時間參數AValue,使用 DayOfTheYear 函數能得到在該日期所在的年份中,該 日期按照順序所計算的天數。因此,作為TDateTime類型的變量 “1月1日”在該函數所得到的 結果為 1 ,“1月2日”所得到的結果為 2,“2月1日”所得到的結果就為 32,依次類推。 ●function DayOfWeek(Date: TDateTime): Integer; Description DayOfWeek returns the day of the week of the specified date as an integer between 1 and 7, where Sunday is the first day of the week and Saturday is the seventh. Note: DayOfWeek is not compliant with the ISO 8601 standard, which defines Monday as the first day of the week. For an ISO 8601 compliant version, use the DayOfTheWeek function instead. 描述: 按照給定的TDateTime類型的參數Date,DayOfWeek 函數得到一周中的第幾天,從1到7。 這裡 星期日 是一周的第一天,而 星期六 是第七天。 ●function DaysBetween(const ANow, AThen: TDateTime): Integer; 描述: 根據兩個TDateTime類型的日期時間變量 ANow 和 AThen,DaysBetween函數能得到兩者之間的 天數的差距。 DaysBetween 僅僅根據天數的不同來計算。因此,對於 1999年12月31日 下午11點59分 到 2000年1月1日 11點58分,該函數得到的結果是 0,因為兩者之間的時間差別還差 1 分鐘才到 1 天。 ●function DaysInAMonth(const AYear, AMonth: Word): Word; 描述: 對於各定的 年份和月份,DaysInAMonth 函數能得到 該月份的總天數。 年份應該為 從 1 到 9999 月份應該為 從 1 到 12 ●function DaysInAYear(const AYear: Word): Word; 描述: 對於給定的年份,DaysInAYear函數能得到該年份的總天數。 年份應該為 1 到 9999。 ●function DaysInMonth(const AValue: TDateTime): Word; 描述: 根據給定的TDateTime類型的時間日期參數AValue,DaysInMonth函數能得到該月份的總天數。 ●function DaysInYear(const AValue: TDateTime): Word; 描述: 根據給定的TDateTime類型的時間日期參數AValue,DaysInYear函數能得到該年份的總天數。 ●function DaySpan(const ANow, AThen: TDateTime): Double; 描述: 根據兩個TDateTime類型的日期時間參數ANow和AThen,DaySpan能得到在天數上的差距。 與 DaysBetween 函數不同,DaysBetween 函數 只是計算 整的天數,而 DaySpan函數會 將不足一天的數也得到。 注意:此函數返回的數值為 Double 型。 ☆ Month 開頭的函數 ●function MonthOf(const AValue: TDateTime): Word; 描述: 根據給定的TDateTime類型的時間日期參數AValue,MonthOf函數能得到該年份的該月份數。 MonthOf返回數值為 1 到 12。 注意:MonthOf函數得到的數值與MonthOfTheYear函數相同 ●function MonthOfTheYear(const AValue: TDateTime): Word; 與MonthOf函數相同。 ●function MonthsBetween(const ANow, AThen: TDateTime): Integer; 描述: 根據兩個給定的TDateTime類型的參數ANow和AThen,MonthsBetween函數能得到兩個日期在月份 上差距數。因為月份的天數是不同的,所以 MonthsBetween 函數返回的是一個近似值,該近似 值基於每個月份為 30.4375 天。不足一個月的數字將不被計算。 因此,例如,對於 2月1日 到 2月28日,MonthsBetween 返回的數值為 0。 同樣,對於 2月1日 到 3月1日,MonthsBetween 返回的數值也是 0。 ●function MonthSpan(const ANow, AThen: TDateTime): Double; 描述: 根據兩個給定的TDateTime類型的參數ANow和AThen,MonthsBetween函數能得到兩個日期在月份 上差距數。因為月份的天數是不同的,所以 MonthsBetween 函數返回的是一個近似值,該近似 值基於每個月份為 30.4375 天。與 MonthsBetween 函數不同,MonthsBetween函數不計算不足 一個月的數字,MonthSpan函數將會得到不足一個月的數字。 注意:此函數返回的類型為 Double ●function MonthStr(DateTime: TDateTime): string; Description HTTP message headers permit several formats for the representation of date and time values. MonthStr converts a TDateTime value into a string representing the month. MonthStr allows server applications to work with date values taken from HTTP request messages, without worrying about the details of how they are formatted. ☆ Week 開頭的函數 ●function WeekOf(const AValue: TDateTime): Word; 描述: 根據TDateTime類型的日期時間參數AValu,WeekOf函數會得到該星期為一年的第幾個 星期。 ●function WeeksInAYear(const AYear: Word): Word; 描述: WeeksInAYear 函數根據年份得到在該年份中共包含多少個星期。 ●function WeeksBetween(const ANow, AThen: TDateTime): Integer; 描述: 根據兩個TDateTime類型的日期時間參數ANow和AThen,WeeksBetween函數將得到這兩個時間在 星期上的差數。如果差數不足一個星期,則忽略掉。 ●function WeekSpan(const ANow, AThen: TDateTime): Double; 描述: 根據兩個TDateTime類型的日期時間參數ANow和AThen,WeeksBetween函數將得到這兩個時間在 星期上的差數。如果差數不足一個星期,則WeekSpan函數不會忽略掉。 注意:此函數的返回類型為 Double ☆ Year 開頭的函數 ●function YearOf(const AValue: TDateTime): Word; 描述: 根據給定的TDateTime類型的日期時間參數AValue,YearOf函數能得到該日期的年份數字。 YearOf函數返回的數值為從 1 到 9999 ●function YearsBetween(const ANow, AThen: TDateTime): Integer; 描述: 根據兩個給定的TDateTime類型的參數ANow和AThen,YearsBetween函數能得到兩個日期在年份 上差距數。因為年份的天數是不同的,所以 YearsBetween 函數返回的是一個近似值,該近似 值基於每年的天數為 365.25 天。不足的一年的差距將不會被計算。 因此例如:對於 1月1日和12月31日,如果這兩個日期在同一年,則 YearsBetween 返回數值 為 0;如果這兩個日期在臨近的年份,則 YearsBetween 函數返回數值為 1。 ●function YearSpan(const ANow, AThen: TDateTime): Double; 描述: 根據兩個給定的TDateTime類型的參數ANow和AThen,YearsBetween函數能得到兩個日期在年份 上差距數。因為年份的天數是不同的,所以 YearsBetween 函數返回的是一個近似值,該近似 值基於每年的天數為 365.25 天。與 YearsBetween 函數不同,YearsBetween函數將忽略掉不 足一年的數字,而 YearSpan 將計算不足一年的數字。 注意:該函數返回類型為Double ●function Yesterday: TDateTime; 描述: Yesterday函數能得到當前日期的前一天的日期,返回數值中不包括時間部分。 例如: 當前日期是 2003/3/19 則 showmessage(datetimetostr(Yesterday)); 將得到 2003/3/18 ☆日期的合成 ●function EncodeDate(Year, Month, Day: Word): TDateTime; 描述: EncodeDate函數將根據參數 年份、月份、日子 而得到一個TDateTime類型的時間變量。 ●function EncodeDateDay(const AYear, ADayOfYear: Word): TDateTime; 描述: EncodeDateDay將根據參數年份和天數,而得到一個TDateTime類型的時間變量。 其中AYear 為 1 到 9999。 ADayOfYear 為日子在該年份順序排列的天數,例如,1月1日時,ADayOfYear為1, 2月2日時,ADayOfYear為2,3月1日時,ADayOfYear為32。 ●function EncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth: Word; const ADayOfWeek: Word = 1): TDateTime; 描述: EncodeDateMonthWeek 函數將根據參數 年份、月份、星期數,星期幾,來得到一個TDateTime類型 的時間變量。 其中AYear 為 1 到 9999。 其中AMonth 為 1 到 12。 AWeekOfMonth是在該月份的星期數,1 表示第一個星期,可能包含4天或更多的天數。 注意,一個月的第一天如果是 星期5,星期6或星期日,用表示這三天的AMonth數值必須設定 為上一個月份的數字,同時 AWeekOfMonth 要設為在上一個月所在的星期數。 同樣,如果一個月的最後一天是 星期1,星期2,或星期3,那麼用表示這三天的AMonth數值 必須設定為下一個月份的數字,同時 AWeekOfMonth 為 1。 ADayOfWeek表示星期幾,星期一為1,星期二為2。 ●function EncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word):TDateTime; 描述: EncodeDateTime 根據參數 年份、月份、日子、小時、分、秒、毫秒 來得到一個TDateTime類型 日期時間。 ●function EncodeDateWeek(const AYear, AWeekOfYear: Word; const ADayOfWeek: Word = 1): TDateTime; 描述: EncodeDateWeek 根據參數 年份、星期數、星期幾 來得到一個TDateTime類型日期時間。 AWeekOfYear是在該年份的星期數,1 表示第一個星期,可能包含4天或更多的天數。 注意,一年的第一天如果是 星期5,星期6或星期日,用表示這三天的AYear數值必須設定 為上一個年份的數字,同時 AWeekOfYear 要設為在上一個年所在的星期數。 同樣,如果一年的最後一天是 星期1,星期2,或星期3,那麼用表示這三天的AYear數值 必須設定為下一個年份的數字,同時 AWeekOfYear 為 1。 ADayOfWeek表示星期幾,星期一為1,星期二為2。 ●function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime; 描述: EncodeTime函數根據參數 小時、分、秒、毫秒 得到個一個TDateTime數值。 ☆日期的分解 ●procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word); 描述: DecodeDate從一個TDateTime類型參數Date中分解出得到年份、月份、日子。 ●procedure DecodeDateDay(const AValue: TDateTime; out AYear, ADayOfYear: Word); 描述: DecodeDateDay 方法會根據TDateTime類型參數AValue 得到相應的年份和日期總數。 ADayOfYear:1月1日,此數值為1;1月2日,此數值為2。 ●procedure DecodeDateMonthWeek(const AValue: TDateTime; out AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word); 描述: DecodeDateMonthWeek方法根據TDateTime類型參數AValue 得到相應的年份、月份、月份中的第幾個 星期、星期幾 AYear:年份 AMonth:月份,1 到 12 AWeekOfMonth:在該月份中的第幾個星期 ADayOfWeek:星期幾。星期一為1。 ●procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word); 描述: DecodeDateTime 方法根據TDateTime類型參數AValue 得到相應的年份、月份、日子、小時、分、秒、 毫秒。 ●procedure DecodeDateWeek(const AValue: TDateTime; out AYear, AWeekOfYear, ADayOfWeek: Word); 描述: DecodeDateWeek方法根據TDateTime類型參數AValue 得到相應的年份、在該年中的第幾個星期、星期幾。