我使用Floating vars将TDateTime thing修复为一个文件。但是,现在我遇到了一个新问题:浮点无效 - 很可能是因为逗号分隔符。
如何在程序中设置默认分隔符?或者还有其他方法吗?
答案 0 :(得分:3)
当您致电TFormatSettings
和StrToFloat
时,您可以使用FloatToStr
记录来指定小数点分隔符。你必须决定使用什么并坚持下去。以下是带有.
var
d: TDateTime;
s: string;
fs: TFormatSettings;
begin
d := Now();
fs.DecimalSeparator := '.';
s := FloatToStr(d, fs);
end;
另一种选择是使用XML标准日期时间格式。 Delphi在XSBuiltIns
中有一些函数可以执行从TDateTime
到string
的转换。您将在值中设置时区偏移,因此如果将持久化的TDateTime从一个时区移动到另一个时区,则可能会有一些不需要的行为。这取决于值的用法。
var
d: TDateTime;
s: string;
begin
d := Now();
s := DateTimeToXMLTime(d);
d := XMLTimeToDateTime(s);
end;
答案 1 :(得分:1)
正如米卡尔所说,有很多方法可以做到这一点。要重新上限,您希望以文本格式将TDateTime
存储到文件中,并且无论恢复发生的区域设置如何,都能够成功恢复此值。
选项1
存储时,请拨打FloatToStr
,但请强制“。”通过TFormatSettings
参数的小数分隔符。在还原时,请使用StrToFloat
与TFormatSettings
相同的<{1}}。
选项2
使用base 64对8字节TDateTime
值进行编码。这样做的缺点是它使值不可读。
选项3
与选项1类似,但通过调用TDateTime
并显式传递不依赖于语言环境中的任何内容的DateTimeToStr
来对TFormatSettings
进行编码,因此不要依赖于语言环境的日期或时间分隔符,而不是强迫你自己。使用相同的StrToDateTime
记录来反转TFormatSettings
来电。