2017-05-25

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

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

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

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

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


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