변환

2012-11-09 8 views
14

이 코드는 델파이 XE2에서 작동합니다 작동하지 않습니다,하지만 StrtoDateTime 변환에서 "유효한 날짜와 시간"오류 제공합니다변환

procedure TForm2.Button1Click(Sender: TObject); 
var 
    s: string; 
    d: TDateTime; 
    FmtStngs: TFormatSettings; 
begin 
    GetLocaleFormatSettings(GetThreadLocale, FmtStngs); 
    FmtStngs.DateSeparator := #32; 
    FmtStngs.ShortDateFormat := 'dd mmm yyyy'; 
    FmtStngs.TimeSeparator := ':'; 
    FmtStngs.LongTimeFormat := 'hh:nn'; 

    s := FormatDateTime('', Now, FmtStngs); 
    d := StrToDateTime(s, FmtStngs); 
end; 

어떤 힌트를? 내부 루틴이 문자열이 문자열의 날짜와 시간 부분을 결정하기 위해이 문자를 사용하는 구문 분석 할 수 있기 때문에

+2

을 BTW 다음 DateSeparator는 형식 문자열에서 '/'변경하는 데 사용됩니다. 그것을 얻으려면 ShortDateFormat을 'dd/mmm/yyyy'로 설정해야합니다. 그렇지 않으면 쓸모가 없습니다. o) –

답변

15

에보고 StrToDateTime. StrToDateTime이 어떻게 든 ...이며, VarToDateTime이 OS 자체를 결정할 수 없는지 물어볼 것입니다.

델파이 XE3와 함께 작동 (뿐만 아니라 이전 버전의 작동합니다) :

procedure TForm2.Button1Click(Sender: TObject); 
var 
    s: string; 
    d: TDateTime; 
    FmtStngs: TFormatSettings; 
begin 
    GetLocaleFormatSettings(GetThreadLocale, FmtStngs); 
    FmtStngs.DateSeparator := #32; 
    FmtStngs.ShortDateFormat := 'dd mmm yyyy'; 
    FmtStngs.TimeSeparator := ':'; 
    FmtStngs.LongTimeFormat := 'hh:nn'; 

    s := FormatDateTime('', Now, FmtStngs); 
    d := VarToDateTime(s); 
end; 
+1

Inb 사실, VarToDateTime을 사용합니다. 또한 TFormatSettings 구조를 사용할 필요가 없습니다. 모두를위한 Thnx .. – Moore

15

당신은 두 가지 문제

  1. 당신은 DateSeparator로 공백을 사용할 수 있습니다. 당신이 특별한 날짜 시간이-형식은 당신이 더 VarToDateTime를 사용하는 대신해야 변환하려면 몇 달이 부분 mmm 문자열을 사용할 때

  2. StrToDateTime 기능이 작동하지 않습니다이이 QC 23301