2017-05-25

【Delphi】設定日期格式, 不受主機控制台設定值影響

通常要將字串轉為 TDate 日期型別,我們會用 StrToDate() 函式進行轉換

Ex:
StrToDate('2017/2/14');

但這個前提是您的字串格式 和 控制台的 "地區及語言' 的 日期 格式相同,若兩者格式不同,使用 StrToDate 會發生錯誤。

要避免發生錯誤,則在 StrToDate() 加入 TFormatSettings 型別參數


  1.  
  2. procedure TForm1.Button2Click(Sender: TObject);
  3. var
  4. sFormatSet: TFormatSettings;
  5. tToday: TDate;
  6. begin
  7. // 設定日期格式, 不受主機控制台設定值影響
  8. GetLocaleFormatSettings(1028, sFormatSet);
  9. sFormatSet.DateSeparator := '/';
  10. sFormatSet.ShortDateFormat := 'yyyy/MM/dd'; // 注意大、小寫
  11. tToday := StrToDate('2017/2/14',sFormatSet);
  12. tToday := IncMonth(tToday,-1);
  13. ShowMessage('today: '+ FormatDateTime('yyyymmdd',tToday))
  14. end;
  15.