亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi中對時間操作方法匯總

2020-01-31 20:51:23
字體:
來源:轉載
供稿:網友

一般來說在delphi中用于描述時間的有幾種數據結構,而對時間的操作,實質上就是對這些結構的操作。

TDateTime類型:

Delphi中最常用的表示日期時間的數據類型TDateTime類型,和普通的整形數一樣,你可以給日期定義一個日期型變量以便在程序中進行操作。TdateTime類型實質上是一個Double型的數,在Delphi中是這樣定義TdateTime類型: type TDateTime = type Double ,具體的算法是用Double數的整數部分表示日期,以1989年12月30日為基準點,以天為單位進行加減,如數字1表示1900年1月1日,數字-1表示1989年12月29日。而小數部分則用來表示時間,其值為欲表示的時間與一整天總時間的比值,如早上6點就是6/24=0.25,而早上6:15就是(6*60+15)/(24*60)=0.2604166666666666666666666666667,下面,給出幾個例子說明TDateTime類型 與Double類型的交互關系
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之間的轉換方法,因此,從根本上對TDateTime的操作與Double完全一樣。

TTimeStamp 類型:
這是一個用來描述日期與時間的一個結構類型,在Delphi中是這樣定義的:

type TTimeStamp = record Time: Integer; {從午夜0點開始到指定時間的毫秒數 } Date: Integer; {以本日為基準到指點日期的天數} end; 

和TDateTime相比,可更直觀表示高精度的時間,一般用于毫秒級的運算以及用于表示較長的時間。

PsystemTime 類型:
一個用于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中相關函數:

用于時間操作的函數

Date函數:
定義:Date: TDateTime;
作用:返回當前的日期
范例:

CurrentDate := Date; 

DayOfWeek函數:
定義:function DayOfWeek(Date: TDateTime): Integer;
作用:得到指定日期的星期值,返回1~7,代表周日到周六。

IncMouth函數:
定義:function IncMonth(const Date: TDateTime; NumberOfMonths: Integer): TDateTime;
作用:求給定的日期Data在NumberOfMonths個月后的日期。
范例:

Date1 := IncMonth(date,10); 

如果今天是2002-5-3,則Date1就是2003-3-3

IsLeapYear函數:
定義:function IsLeapYear(Year: Word): Boolean;
作用:判斷指定的年份是否是閏年;
范例:

if isLeapYear(2000) then ShowMessage(‘該年是閏年'); 

Now函數:
定義:function Now: TDateTime;
作用:用于取得當前的日期時間
范例:

CurrentDateTime := Now; 

ReplaceDate 過程
定義:procedure ReplaceDate(var DateTime: TDateTime; const NewDate: TDateTime);
作用:使用參數Newdate日期部分替換參數DateTime的日期部分,但不改變時間部分。

ReplaceDate 過程
定義:procedure ReplaceTime(var DateTime: TDateTime; const NewTime: TDateTime);
作用:使用參數Newdate時間部分替換參數DateTime的時間部分,但不改變日期部分。
如果上述這兩個過程一起用,就相當于賦值了。

Time函數:
定義:function Time: TDateTime;
作用:返回當前的時間
范例:

CurrentTime := Time; 

各種時間類型之間的轉換函數

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;
在使用兩位年份時的起始年份。

好了,至此delphi中關于時間操作的部分基本講完了,讀者在實際編程運用的時候還可根據自身需要查看相應的幫助文件解決遇到的問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本精品一区二区三区在线播放视频| 中文字幕亚洲色图| 日韩高清电影免费观看完整版| 国产91色在线|免| 欧美另类精品xxxx孕妇| 日韩欧美中文在线| 亚洲国产精品yw在线观看| 亚洲午夜未满十八勿入免费观看全集| 欧洲成人免费aa| 精品久久久久久亚洲精品| 中文字幕av一区二区三区谷原希美| 青青久久av北条麻妃黑人| 911国产网站尤物在线观看| 中文字幕亚洲第一| 久久久久久久久久久久av| 裸体女人亚洲精品一区| 亚洲一品av免费观看| 91高清在线免费观看| 国产精品视频99| 国产精品一区二区久久久| 91精品国产91久久久| 国内精品久久久久久影视8| 97成人精品视频在线观看| 国产精品综合不卡av| 亚洲欧美日韩中文在线| 国产精品免费一区二区三区都可以| 国产在线精品一区免费香蕉| 国产精品视频白浆免费视频| 最近2019中文字幕mv免费看| 26uuu另类亚洲欧美日本老年| 在线视频欧美性高潮| 精品福利在线视频| 永久555www成人免费| 97在线观看视频国产| 欧美国产日韩视频| 91色在线视频| 亚洲午夜久久久影院| 高清欧美一区二区三区| 日韩美女毛茸茸| 日韩激情视频在线播放| 91久久在线视频| 欧美日韩中文在线观看| 日韩电影免费观看中文字幕| 亚洲成人av在线播放| 欧美第一页在线| 红桃av永久久久| 国产精品久久久久7777婷婷| 日韩av在线看| 日本精品中文字幕| 91久久精品久久国产性色也91| 欧美高清在线播放| 26uuu国产精品视频| 亚洲成人黄色在线观看| 精品欧美激情精品一区| 欧美色视频日本版| 国产精品久久久久秋霞鲁丝| 亚洲欧洲中文天堂| 国产在线日韩在线| 国产精品99蜜臀久久不卡二区| 亚洲女人天堂网| 国产精品久久久91| 欧美一级成年大片在线观看| 精品久久久久久久中文字幕| 欧美成人自拍视频| 亚洲精品黄网在线观看| 深夜福利国产精品| 韩国日本不卡在线| 亚洲一区二区日本| 精品国产依人香蕉在线精品| 国产亚洲精品日韩| 亚洲国内高清视频| 亚洲裸体xxxx| 亚洲福利在线视频| xxav国产精品美女主播| 欧美最猛性xxxxx(亚洲精品)| 国产精品观看在线亚洲人成网| 一本色道久久综合狠狠躁篇怎么玩| 日韩成人av在线| 8x海外华人永久免费日韩内陆视频| 日本国产精品视频| 久久国产天堂福利天堂| 亚洲图片欧洲图片av| 成人免费视频网址| 精品夜色国产国偷在线| 狠狠躁夜夜躁人人躁婷婷91| 国产人妖伪娘一区91| 91精品国产自产91精品| 91影视免费在线观看| 日本久久久久久久久| 91精品国产自产在线老师啪| 亚洲国产中文字幕久久网| 97人洗澡人人免费公开视频碰碰碰| 成人女保姆的销魂服务| 中文国产亚洲喷潮| 伊人男人综合视频网| 国产午夜精品麻豆| 欧美电影免费观看高清完整| 成人网址在线观看| 国产亚洲在线播放| 91精品视频在线免费观看| 九九热这里只有精品6| 精品国产欧美一区二区五十路| 日韩三级影视基地| 日韩欧美在线免费观看| 大荫蒂欧美视频另类xxxx| 欧美激情综合亚洲一二区| 欧美激情国产精品| 久久久噜噜噜久噜久久| 欧美日韩另类在线| 亚洲国产成人av在线| 国产日韩欧美在线看| 欧美猛交ⅹxxx乱大交视频| 91精品国产91久久| 精品久久久久久久久久久| 日韩一二三在线视频播| 亚洲自拍高清视频网站| 日产精品久久久一区二区福利| 欧美激情视频免费观看| 日韩av中文字幕在线播放| 亚洲欧美国产一本综合首页| 久久国产天堂福利天堂| 亚洲自拍欧美色图| 精品亚洲精品福利线在观看| 成人444kkkk在线观看| 91免费综合在线| 成人国内精品久久久久一区| 亚洲人成在线一二| 成人免费福利在线| 久久成年人视频| 欧美激情视频网站| 91深夜福利视频| 国产精品入口免费视| 国内成人精品视频| 日本欧美一二三区| 国产成人精品在线视频| 亚洲品质视频自拍网| 国产精品jizz在线观看麻豆| 亚洲性av在线| 欧美午夜电影在线| 亚洲国产精品女人久久久| 久久久久久久色| 96sao精品视频在线观看| 国产日韩欧美视频| 日本亚洲欧美成人| 91久久国产综合久久91精品网站| 亚洲第一天堂无码专区| 亚洲国产女人aaa毛片在线| 亚洲欧美日韩精品| 亚洲国产精品人久久电影| 久久视频国产精品免费视频在线| 国产不卡av在线免费观看| 96sao精品视频在线观看| 国产精品高清网站| 日本久久久久亚洲中字幕| 91国产在线精品| 亚洲第一av网站| 中文字幕亚洲无线码a| 欧美做受高潮电影o| 欧美激情免费视频| 国产精品亚洲综合天堂夜夜| 日韩中文字幕精品视频| 久久精品中文字幕| 日韩成人在线视频| 97精品在线观看|