ठीक है, मेरी प्रतिक्रिया थोड़ी देर हो चुकी है, लेकिन यहां नए डेल्फी के लिए एक समाधान है।
यह अंतर्निहित वर्ग अधिभारकों का उपयोग करता है ताकि इस प्रकार के रिकॉर्ड का उपयोग किया जा सके जैसे कि वे टीडीएटीटाइम चर हैं।
TDateRec = record
year,month,day,hour,minute,second,millisecond:word;
class operator implicit(aDateRec:TDateRec):TDateTime;
class operator implicit(aDateTime:TDateTime):TDateRec; // not needed
class operator implicit(aDateRec:TDateRec):String; // not needed
class operator implicit(aDateRec:String):TDateRec; // not needed
end;
कार्यान्वयन:
uses DateUtils;
class operator TDateRec.Implicit(aDateRec:TDateRec):TDateTime;
begin
with aDateRec do // Yeah that's right you wankers. I like "with" :)
Result := encodeDateTime(Year,Month,Day,Hour,Minute,Second,Millisecond);
end;
class operator TDateRec.Implicit(aDateTime:TDateTime):TDateRec;
begin
with Result do
DecodeDateTime(aDateTime,Year,Month,Day,Hour,Minute,Second,Millisecond);
end;
class operator TDateRec.Implicit(aDateRec:TDateRec):String;
begin
Result := DateTimeToStr(aDateRec)
end;
class operator TDateRec.Implicit(aDateRec:String):TDateRec;
begin
Result := StrToDateTime(aDateRec)
end;
अब तुम अपनी तिथियाँ इस तरह की घोषणा कर सकते हैं:
const
Date1:TDateRec=(Year:2009;month:05;day:11);
Date2:TDateRec=(Year:2009;month:05;day:11;hour:05);
Date3:TDateRec=(Year:2009;month:05;day:11;hour:05;minute:00);
अगर यह काम करता है देखने के लिए, निम्नलिखित निष्पादित करें:
ShowMessage(Date1); // it can act like a string
ShowMessage(DateToStr(Date1)); // it can act like a date
हैं आप वास्तव में अपने सभी Tdat को प्रतिस्थापित करना चाहते हैं इसके साथ ईटाइम चर, आपको शायद कुछ अन्य ऑपरेटरों को अधिभारित करने की आवश्यकता है (जोड़ें, घटाएं, स्पष्ट करें ...)।
महान प्रश्न - मैं अक्सर यह करने के लिए चाहता था (दिनांकों से समय के लिए अधिक है, लेकिन सिद्धांत ज्यादा एक ही है - जैसे मैं एक स्थिरांक, आदि के रूप में एक TDateTime में 6:45 बजे रखना चाहते हैं)। मैं हमेशा टिप्पणियों के साथ अपने पहले उदाहरण की तरह कुछ कर रहा हूं - और यह दर्द है जब मुझे बाद में इसे बदलने की जरूरत है! – robsoft
ऐसा लगता है कि जीईएक्सपेर्ट्स या डीएलएएनएक्सेंशन कुछ ऐसा करने में सक्षम होना चाहिए, या तो एक तिथि के रूप में सही समय पर टिप्पणी करने के लिए एक विशेषज्ञ के रूप में, या एक प्रीप्रोसेसर कनवर्टिंग स्ट्रिंग को टीडीएटीटाइम में परिवर्तित करना चाहिए। आईएसओ 8601 प्रारूपों को अनुमति देने से केवल सभी अस्पष्टता को हटा दिया जाना चाहिए। – mghie
@ मागी - अच्छा बिंदु। एक GExperts समाधान मेरे लिए पूरी तरह से स्वीकार्य होगा। ऐसा तब होता है जब मुझे कैलकुलेटर को डिवीजन करने के लिए बाहर निकलना पड़ता है जिसे मैं निराश करता हूं। :-) – robsoft