2011-02-16 2 views
1

플로팅 바를 사용하여 TDateTime thing을 수정하여 파일에 저장했습니다. 그러나 이제는 새로운 문제에 직면합니다. 잘못된 부동 소수점 - 쉼표 구분 기호로 인해 발생했을 가능성이 큽니다.TDateTime을 Floats에 저장할 때 로케일 사용을 피합니까?

내 프로그램에서 기본 구분 기호를 어떻게 설정할 수 있습니까? 아니면 다른 방법이 있습니까?

감사합니다.

답변

3

StrToFloatFloatToStr을 호출 할 때 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; 
+0

첫 발췌 문장이 완벽하게 작동했습니다. 감사! – Jeff

+0

+1 Jeff에게 시간대, 현지 시간 등의 문제에 대해 알리는 것이 좋습니다. –

1

미카엘 (Mikael)이 제안했듯이이를 수행하는 방법은 다양합니다. 다시 캡핑하려면 TDateTime을 텍스트 형식의 파일에 저장하고 복원이 발생하는 로케일에 관계없이이 값을 성공적으로 복원 할 수 있어야합니다.

저장하는 경우 옵션 1

, FloatToStr, 말, 그러나 힘 전화 '.' 소수점 구분 기호는 TFormatSettings 매개 변수를 통해 전달됩니다. 복원시 TFormatSettings과 함께 StrToFloat을 사용하십시오.

옵션 2

인코딩이이 값을 읽을 렌더링하는 단점을 가지고베이스 (64)를 사용하여 8 바이트 값 TDateTime. 그래서 로케일의 날짜 또는 시간 구분에 의존하지 않는 - DateTimeToStr를 호출하고 명시 적으로 로케일에서 아무것도에 의존하지 않는 TFormatSettings을 전달하여

옵션 1과 마찬가지로 옵션 3

하지만, 인코딩 TDateTime 대신 자신의 것을 강요하십시오. 동일한 TFormatSettings 레코드를 사용하여 StrToDateTime 콜을 취소합니다.

관련 문제