我得到TDateTime thing通過使用Float vars將它們存儲在一個文件中修復。但是,現在我面臨一個新問題:無效浮點 - 很可能是因爲逗號分隔符。將TDateTime存儲在浮點時避免出現語言環境衝突?
如何在程序中設置默認分隔符?或者還有其他方法嗎?
謝謝!
我得到TDateTime thing通過使用Float vars將它們存儲在一個文件中修復。但是,現在我面臨一個新問題:無效浮點 - 很可能是因爲逗號分隔符。將TDateTime存儲在浮點時避免出現語言環境衝突?
如何在程序中設置默認分隔符?或者還有其他方法嗎?
謝謝!
當您撥打StrToFloat
和FloatToStr
時,可以使用TFormatSettings
記錄指定小數點分隔符。你必須決定使用什麼,並堅持。這是一個帶.
var
d: TDateTime;
s: string;
fs: TFormatSettings;
begin
d := Now();
fs.DecimalSeparator := '.';
s := FloatToStr(d, fs);
end;
另一種選擇是使用XML標準日期時間格式示例代碼。德爾福在XSBuiltIns
中有一些功能來做TDateTime
到string
之間的轉換。您將在該值中包含時區偏移量,因此如果將持久TDateTime從一個時區移至另一個時區,則可能會出現一些不需要的行爲。這取決於值的用法。
var
d: TDateTime;
s: string;
begin
d := Now();
s := DateTimeToXMLTime(d);
d := XMLTimeToDateTime(s);
end;
正如Mikael所說,有很多方法可以做到這一點。要重新設置,您希望以文本格式將TDateTime
存儲到文件中,並且無論發生恢復的區域設置如何,都能夠成功恢復此值。
選項1
存放時,請撥打FloatToStr
,比方說,但力 ''通過TFormatSettings
參數進行小數點分隔。恢復時,使用StrToFloat
與TFormatSettings
相同。
選項2
編碼使用基64。這具有的優點是使該值不可讀下行8字節TDateTime
值。
選項3
選項1類似,但編碼TDateTime
通過調用DateTimeToStr
和明確地傳遞一個TFormatSettings
,不依賴於任何的語言環境 - 所以不要依賴於區域設置的日期或時間分隔符,而是強迫你自己。用相同的TFormatSettings
記錄反向呼叫StrToDateTime
。
第一個片段完美運作!謝謝! – Jeff 2011-02-16 15:22:23