2012-11-09 11 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

:

यह डेल्फी XE3 साथ काम करता है (लेकिन यह भी पिछले संस्करणों के साथ काम करना चाहिए) DateSeparator केवल '/' स्वरूप-स्ट्रिंग में परिवर्तित करने के लिए प्रयोग किया जाता है। इसे इस्तेमाल करने के लिए आपको 'डीडी/एमएमएम/वाईवाय' में शॉर्टडेट फॉरमेट सेट करना होगा अन्यथा यह बेकार है: ओ) –

उत्तर

15

में बताया जाता है आप कन्वर्ट करने के लिए कुछ विशेष दिनांक समय-स्वरूप आप बेहतर VarToDateTime का उपयोग करने के बजाय चाहिए चाहते हैं StrToDateTime। बस दोनों के कार्यान्वयन पर एक नज़र डालें और आप पहचान लेंगे कि स्ट्रेटोडेट टाइम किसी भी तरह से है ... और VarToDateTime ओएस से पूछेगा कि क्या यह स्वयं निर्धारित नहीं हो सकता है। BTW

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

वास्तव में, VarToDateTime कामों का उपयोग करके। इसके अलावा, यह TFormatSettings संरचना का उपयोग करने की आवश्यकता को हटा देता है। सभी के लिए Thnx .. – Moore

15

आप क्योंकि आंतरिक दिनचर्या पार्स करने के लिए स्ट्रिंग स्ट्रिंग की तारीख और समय निर्धारित करने के लिए भागों इस चरित्र का उपयोग करता है, दो मुद्दों

  1. आप DateSeparator के रूप में एक खाली स्थान के उपयोग नहीं कर सकते है।

  2. StrToDateTime समारोह जब महीनों भाग का उपयोग mmm स्ट्रिंग काम नहीं करता है, यह इस QC 23301