2010-07-25 8 views
14

मेरे कोड में मुझे एक समस्या का सामना करना पड़ रहा है। उदाहरण कोड:'23/02/2011 12:34:56 'मान्य दिनांक और समय नहीं है

var 
    d1: tdatetime 
begin 
    d1 := strtodatetime('23/02/2011 12:34:56'); 
end; 

लेकिन यह त्रुटि दे रही है:

'23/02/2011 12:34:56' is not valid date and time

क्या मैं क्या कर रहा हूँ के साथ गलत क्या है?

+2

के लिए कोई स्थान मुद्दा तरह लग रहा है: कि एक वैध ब्रिटेन की तारीख है लेकिन उदाहरण के लिए, अमेरिकी तिथि नहीं। –

+5

मैं "स्ट्रेटोडेट [टाइम]" फ़ंक्शन [ओं] पर चेतावनी दूंगा: * "चेतावनी, यह फ़ंक्शन लोकेल पर निर्भर करता है और अन्य कंप्यूटरों पर बुरी तरह विफल हो सकता है। यही कारण है कि आपको कभी भी प्रवेश करने, संपादित करने या संपादित करने के लिए स्ट्रिंग का उपयोग नहीं करना चाहिए एक तारीख स्टोर करें, कभी नहीं! "*। –

उत्तर

31

StrToDateTime समारोह ShortDateFormat और DateSeparator का उपयोग करता तारीख हिस्सा है और LongTimeFormat और TimeSeparator समय भाग में बदलने के लिए। तो स्ट्रिंग को TDateTime में कनवर्ट करने के लिए स्ट्रिंग को थीस चर के साथ मिलान करना होगा। इसके बजाय आप स्ट्रिंग को पार्स करने के लिए TFormatSettings पैरामीटर के साथ StrToDateTime का उपयोग कर सकते हैं।

function StrToDateTime(const S: string; const FormatSettings: TFormatSettings): TDateTime; 

जांच इस नमूने

Var 
StrDate : string; 
Fmt  : TFormatSettings; 
dt  : TDateTime; 
begin 
fmt.ShortDateFormat:='dd/mm/yyyy'; 
fmt.DateSeparator :='/'; 
fmt.LongTimeFormat :='hh:nn:ss'; 
fmt.TimeSeparator :=':'; 
StrDate:='23/02/2011 12:34:56'; 
dt:=StrToDateTime(StrDate,Fmt); 
+0

मिनटों के लिए 'mm' के बजाय' LongTimeFormat' में 'nn' का उपयोग क्यों करें? – CinCout

+1

क्योंकि _nn_ का अर्थ मिनट और _mm_ का मतलब महीनों है। – RRUZ

+0

स्पष्टीकरण के लिए धन्यवाद :) अस्पष्टता पर ध्यान नहीं दिया था। – CinCout

2

यह आपके कोड में दिनांक/समय प्रारूप के कारण होता है जो आपकी लोकेल सेटिंग्स के लिए दिनांक/समय प्रारूप से मेल नहीं खाता है।

डॉक्स से (D2009):

The S parameter must use the current locale's date/time format. In the US, this is commonly MM/DD/YY HH:MM:SS format. Specifying AM or PM as part of the time is optional, as are the seconds. Use 24-hour time (7:45 PM is entered as 19:45, for example) if AM or PM is not specified.

यदि आप किसी पुराने डेल्फी का उपयोग कर रहे हैं, तो StrToDateTime एक विशिष्ट प्रारूप की आवश्यकता हो सकती। डॉक्स (इस मामले में D5) से:

The S parameter must be in the MM/DD/YY HH:MM:SS format. Specifying AM or PM as part of the time is optional, as are the seconds. Use 24-hour time (7:45 PM is entered as 19:45, for example) if AM or PM is not specified.

4

VarToDateTime का उपयोग हो सकता है बहुत आसान है और यह अत्याधुनिक तरीके से काम करता है:

uses Variants; 

newDateTime := VarToDateTime('23/02/2011 12:34:56'); 
+0

यदि दिनांक-समय प्रारूप "06. okt 2015" जैसा कुछ है, तो स्ट्रेटोडेट टाइम (डेटटाइम टीओएसआरटी (अब)) विफल रहता है। लेकिन VarToDateTime (StrToDateTime के बजाए) ठीक काम करता है। यह सबसे अच्छा विकल्प प्रतीत होता है। –

संबंधित मुद्दे