怎么使用Delphi獲取當前的時間,精確到毫秒


先介紹一個可能比較常用的方法,獲取當前時間        

var
    datetime: string;
begin
    datetime:= FormatDateTime('yyyy-mm-dd hh:mm:ss', Now);
    ShowMessage(datetime);
end;

   其中的Now 函數是獲取當前的時間,FormatDateTime 用於將Now獲取的時間信息格式化為想要的格式。

  這個方法可以獲取當前時間,並且格式化為例如 2008-09-10 09:10:58 的格式。

 

在介紹能夠獲取毫秒信息的方法                

var
  currentTime:TSystemTime;
  year, month, day, hour, minute, second, millisecond: string;
  datetime: string;
begin
  GetSystemTime(currentTime);
  year:= IntToStr(currentTime.wYear);
  month:= IntToStr(currentTime.wMonth);
  day:= IntToStr(currentTime.wDay);
  hour:= IntToStr(currentTime.wHour + 8);
  minute:= IntToStr(currentTime.wMinute);
  second:= IntToStr(currentTime.wSecond);
  millisecond:= IntToStr(currentTime.wMilliseconds);

  datetime:= year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second + ':' + millisecond;
  ShowMessage(datetime);
end;

時間的小時數問題

  和C家族的語言(比如C、C++、PHP)一樣,這種方式獲取的時間,年、月、日、分鍾、秒、毫秒都是,但是獲取的小時數是晚了8小時的,比如當前時間是19:30,但是使用這種方法得到的小時數是11點,所以在進行開發的時候,這個問題需要單獨處理一下。

  這也是為什么上面的代碼中小時數會加8的原因:hour:= IntToStr(currentTime.wHour + 8);

 

需要引入的單元

  要使用TSystemTime類型以及GetSystemTime過程需要引用Windows單元。

  其中TSystemTime的定義是

PSystemTime = ^TSystemTime;
_SYSTEMTIME = record
  wYear: Word;
  wMonth: Word;
  wDayOfWeek: Word;
  wDay: Word;
  wHour: Word;
  wMinute: Word;
  wSecond: Word;
  wMilliseconds: Word;
end;
{$EXTERNALSYM _SYSTEMTIME}
TSystemTime = _SYSTEMTIME;
SYSTEMTIME = _SYSTEMTIME;
{$EXTERNALSYM SYSTEMTIME}

  其中GetSystemTime的聲明是這樣的

procedure GetSystemTime; external kernel32 name 'GetSystemTime';

  它的函數原型是

procedure GetSystemTime(var lpSystemTime: TSystemTime); stdcall;

  一看就是使用靜態加載的方式加載了DLL,所以在Windows里面也只是引入GetSystemTime過程,並沒有實現,具體的實現是在 kernel32.dll這個DLL里面實現的。具體這個DLL是使用C語言還是使用Delphi語言實現的就不得而知了,等我以后研究到再說。(估計是用C實現的,要不為什么獲取的時間的小時數會差8個小時,和C語言一樣,不過這只是目前的猜測)

  什么是kernel32.dll?

    kernel32.dll是Windows 9x/Me中非常重要的32位動態鏈接庫文件,屬於內核級文件。它控制着系統的內存管理、數據的輸入輸出操作和中斷處理,當Windows啟動時,kernel32.dll就駐留在內存中特定的寫保護區域,使別的程序無法占用這個內存區域。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM