플로팅 바를 사용하여 TDateTime thing을 수정하여 파일에 저장했습니다. 그러나 이제는 새로운 문제에 직면합니다. 잘못된 부동 소수점 - 쉼표 구분 기호로 인해 발생했을 가능성이 큽니다.TDateTime을 Floats에 저장할 때 로케일 사용을 피합니까?
내 프로그램에서 기본 구분 기호를 어떻게 설정할 수 있습니까? 아니면 다른 방법이 있습니까?
감사합니다.
플로팅 바를 사용하여 TDateTime thing을 수정하여 파일에 저장했습니다. 그러나 이제는 새로운 문제에 직면합니다. 잘못된 부동 소수점 - 쉼표 구분 기호로 인해 발생했을 가능성이 큽니다.TDateTime을 Floats에 저장할 때 로케일 사용을 피합니까?
내 프로그램에서 기본 구분 기호를 어떻게 설정할 수 있습니까? 아니면 다른 방법이 있습니까?
감사합니다.
StrToFloat
및 FloatToStr
을 호출 할 때 TFormatSettings
레코드를 사용하여 소수점 구분 기호를 지정할 수 있습니다. 당신은 무엇을 사용하고 그것을 붙잡을 지 결정해야합니다. 여기에 또 다른 옵션은 XML 표준 날짜 시간 형식을 사용하는 것 .
var
d: TDateTime;
s: string;
fs: TFormatSettings;
begin
d := Now();
fs.DecimalSeparator := '.';
s := FloatToStr(d, fs);
end;
샘플 코드입니다. 델파이는 에 TDateTime
에서 string
까지 변환을 수행하는 몇 가지 기능을 가지고 있습니다. 값에 시간대 오프셋이 있으므로 지속 된 TDateTime을 한 시간대에서 다른 시간대로 이동하면 원하지 않는 동작이 발생할 수 있습니다. 가치의 사용법에 달려 있습니다.
var
d: TDateTime;
s: string;
begin
d := Now();
s := DateTimeToXMLTime(d);
d := XMLTimeToDateTime(s);
end;
미카엘 (Mikael)이 제안했듯이이를 수행하는 방법은 다양합니다. 다시 캡핑하려면 TDateTime
을 텍스트 형식의 파일에 저장하고 복원이 발생하는 로케일에 관계없이이 값을 성공적으로 복원 할 수 있어야합니다.
저장하는 경우 옵션 1
, FloatToStr
, 말, 그러나 힘 전화 '.' 소수점 구분 기호는 TFormatSettings
매개 변수를 통해 전달됩니다. 복원시 TFormatSettings
과 함께 StrToFloat
을 사용하십시오.
옵션 2
인코딩이이 값을 읽을 렌더링하는 단점을 가지고베이스 (64)를 사용하여 8 바이트 값 TDateTime
. 그래서 로케일의 날짜 또는 시간 구분에 의존하지 않는 - DateTimeToStr
를 호출하고 명시 적으로 로케일에서 아무것도에 의존하지 않는 TFormatSettings
을 전달하여
옵션 1과 마찬가지로 옵션 3
하지만, 인코딩 TDateTime
대신 자신의 것을 강요하십시오. 동일한 TFormatSettings
레코드를 사용하여 StrToDateTime
콜을 취소합니다.
첫 발췌 문장이 완벽하게 작동했습니다. 감사! – Jeff
+1 Jeff에게 시간대, 현지 시간 등의 문제에 대해 알리는 것이 좋습니다. –