2013-04-12 23 views
1

在我的大應用程序中,我嘗試讀取另一個dateformat而不是我的語言環境設置。但是,這個例外是失敗的。所以我做了一個簡單的演示來重現。StrToDate不使用我的格式設置

可能是我犯了一個簡單的錯誤。我在Windows XP中的本地設置是芬蘭語日期格式,即'd.m.yyyy'。我想閱讀「yyyy-mm-dd」的瑞典語格式。請幫忙!

unit Unit5; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs; 

const 
    cnFormat  = 'yyyy-mm-dd';    // Swedish dateformat 
    cnFIFormat = 'd.m.yyyy';    // Finnish dateformat 

type 
    TForm5 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    private 
    fSetting: TFormatSettings; 
    function GetCustomDateFormatSettings(aDateFormat: String = cnFormat): TFormatSettings; 
    function GetSafeDate(aDate: String): TDate; 
    end; 

var 
    Form5: TForm5; 

implementation 

{$R *.dfm} 

procedure TForm5.FormCreate(Sender: TObject); 
var 
    vDate: TDate; 
begin 
    fSetting := GetCustomDateFormatSettings; 
    vDate := GetSafeDate('2010-01-04'); 
end; 

function TForm5.GetCustomDateFormatSettings(aDateFormat: String): TFormatSettings; 
begin 
    GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, Result); 
    Result.ShortDateFormat := aDateFormat; 
end; 

function TForm5.GetSafeDate(aDate: String): TDate; 
begin 
    try 
    Result := StrToDate(aDate, fSetting); // <- Exception here 
    except 
    on E: EConvertError do 
    begin 
     // logic to recover from exception 
    end; 
    end; 
end; 

end. 
+0

爲什麼不使用1053而不是LOCALE_SYSTEM_DEFAULT直接獲取瑞典設置? –

+0

好點,謝謝! –

回答

3

好的,得到了​​答案。我忘了DateSeparator。所以爲了避免演示中的異常,我添加了一行。必須讓這更動態...

function TForm5.GetCustomDateFormatSettings(aDateFormat: String): TFormatSettings; 
begin 
    GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, Result); 
    Result.ShortDateFormat := aDateFormat; 
    Result.DateSeparator := '-'; 
end; 
相關問題