用Delphi獲取當前系統時間

2021-04-17 06:59:24 字數 1700 閱讀 2951

在開發應用程式時往往需要獲取當前系統時間。儘管y2k似乎已經平安過去,但在我們新開發的應用程式中還是要謹慎處理「時間」問題。

在《融會貫通--delphi4.0實戰技巧》(以下簡稱「該書」)第89頁專門介紹了兩種獲取當前系統時間的方法,但這兩種方法都存在不足或錯誤,以下就此進行討論。

該書第一種方法是利用time()函式獲得當前系統時間,返回結果是tdatetime結構型別的變數。例如:

procedure tform1.button2click(sender: tobject);

vardatetime:tdatetime;

begin

datetime:=time();

caption:=datetostr(datetime)+' '+timetostr(datetime);

end;

但不論何日期,其結果卻都是99-12-30 xx:xx:xx, 顯然日期出錯了。通過分析delphi的幫助,time()用於返回正確的「時間--時分秒」即timetostr(datetime),而不應該用於返回「日期」。事實上,單獨用於返回日期的系統函式是date。

那麼有什麼是既可返回正確的「時分秒」又可返回正確的「年月日」呢? 可以用now函式,例如:

procedure tform1.button1click(sender: tobject);

varmytime: tdatetime;

begin

mytime:=now;

caption:=datetostr(mytime)+' '+timetostr(mytime);

//或直接用 caption := datetimetostr(now);

end;

用now返回的日期格式中年只有2位,即2023年顯示為00, 這似乎不太令人滿意. 此外now和time都只能獲得精確到秒的時間,為了得到更精確的毫秒級時間,可以使用api函式getsystemtime,它對應的tsystemtime型別的定義為:

tsystemtime = record

wyear: word;

wmonth: word;

wdayofweek: word;

wday: word;

whour: word;

wminute: word;

wsecond: word;

wmilliseconds: word;

end;

顯然,在程式邏輯中還能夠方便地使用其結構成?時---各類時間值,因此使用函式getsystemtime具有很大優越性。但該書中該函式的用法是錯誤的,通過查閱windows sdk幫助可知,該函式原型為:

void getsystemtime(lpsystemtime lpst),引數指標lpst獲取系統時間,因此可如以下程式段實現:

procedure tform1.button3click(sender: tobject);

varsystime: tsystemtime;

begin

getsystemtime(systime);

caption:=inttostr(systime.wyear)+' '+inttostr(systime.wmonth);

//if systime.wyear>2000 then

// ......在程式邏輯中利用獲取的各類時間值 

end;

綜合以上討論,獲取當前系統時間利用函式getsystemtime比較方便而且靈活。

用Delphi獲取當前系統時間

在開發應用程式時往往需要獲取當前系統時間。儘管y2k似乎已經平安過去,但在我們新開發的應用程式中還是要謹慎處理 時間 問題。在 融會貫通 delphi4.0實戰技巧 以下簡稱 該書 第89頁專門介紹了兩種獲取當前系統時間的方法,但這兩種方法都存在不足或錯誤,以下就此進行討論。該書第一種方法是利用ti...

C C 獲取當前系統時間

方案 優點 僅使用c標準庫 缺點 只能精確到秒級 include include int main void size t strftime char strdest,size t maxsize,const char format,const struct tm timeptr 根據格式字串生成字...

js獲取當前系統時間

var mydate new date mydate.getyear 獲取當前年份 2位 mydate.getfullyear 獲取完整的年份 4位,1970 mydate.getmonth 獲取當前月份 0 11,0代表1月 mydate.getdate 獲取當前日 1 31 mydate.get...