簡體   English   中英

如何在delphi中將字符串轉換為日期

[英]How to convert string to date in delphi

當我將string類型轉換為TDateTime我收到一個錯誤。 我正在使用VarToDateTime函數。 我的字符串日期是2018-07-11T13:45:14.363

var
  s: string;
  v: Variant;
  dt: TDateTime;
begin
  s := '2018-07-11T13:45:14.363';
  v := s;
  dt := VarToDateTime(v);
end;

在此輸入圖像描述

使用VarToDateTimestring轉換為TDateTime VarToDateTime取決於用戶系統中的區域設置。 如果這些設置與字符串不匹配,則轉換失敗。 這就是我的系統轉換失敗的原因,也是你的系統轉換失敗的原因。


如果您正在使用Delphi XE6或更高版本, 主要選項是使用Marc Guillot建議的函數ISO8601ToDate() 在另一個答案中

如果您正在使用Delphi 2010或更高版本,則可以使用此處提供的解決方案。

早於Delphi 2010的版本會阻塞輸入字符串中的“T”,如果刪除“T”或用空格替換,則可能會成功。


使用轉換函數接受TFormatSetting ,可以根據要轉換的字符串進行調整。 這樣的函數是StrToDateTime()的以下重載(參見Embarcadero文檔

function StrToDateTime(const S: string; const AFormatSettings: TFormatSettings): TDateTime;

設置AFormatSettings以匹配要轉換的字符串,確保轉換成功:

procedure TForm3.Button1Click(Sender: TObject);
var
  fs: TFormatSettings;
  s: string;
  dt: TDateTime;
begin
  fs := TFormatSettings.Create;
  fs.DateSeparator := '-';
  fs.ShortDateFormat := 'yyyy-MM-dd';
  fs.TimeSeparator := ':';
  fs.ShortTimeFormat := 'hh:mm';
  fs.LongTimeFormat := 'hh:mm:ss';

  s := '2018-07-11T13:45:14.363';
  dt := StrToDateTime(s, fs);
end;

這些似乎是ISO8601日期時間字符串: https//en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations

因此,在Delphi XE 6及更高版本中,您可以使用相應的轉換函數:ISO8601ToDate

http://docwiki.embarcadero.com/Libraries/XE8/en/System.DateUtils.ISO8601ToDate

但是如果您使用的是舊版本的Delphi,則可以使用XSBuiltIns單元上的XMLTimeToDateTime函數進行該轉換(自Delphi 6起可用)。

http://docwiki.embarcadero.com/Libraries/Tokyo/en/Soap.XSBuiltIns.XMLTimeToDateTime

嘗試使用StrToDateTime函數將string DateTime轉換為TDateTime值。 請注意,傳遞的日期時間格式應為當前系統日期/時間格式,否則將引發異常。 一個例子: StrToDateTime('2018-07-11 12:34:56');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM