delphi समस डेल्फी में समय गणित




समय तथा कार्य ट्रिक (4)

मेरे पास एक बहुत ही असामान्य समस्या है (मेरे लिए) मैं एक ऐसा आवेदन लिख रहा हूं जो एक उपयोगकर्ता को अपने सिस्टम का समय स्पष्ट या स्पष्ट तिथि (मेरी तिथि को बदलकर 6/3/1955 में) या बटनों का उपयोग करके वेतन वृद्धि (1 महीने के आगे आगे बढ़ने) में बदलने की अनुमति देगा।

मैं यह लिख रहा हूं कि मेरे कुछ प्रयोक्ता कुछ सॉफ़्टवेयर का परीक्षण करते हैं जो बिलिंग प्रणाली के असली दुनिया के उपयोग को अनुकरण करने के लिए इस तरह कूदता है।

डेल्फी में समय बदलना बहुत ही आसान है:

SetDateTime(2008,05,21,16,07,21,00);

लेकिन मुझे यकीन नहीं है कि डेल्फी (2006) ने किसी तिथि के गणित के लिए मददगारों में बनाया है, जो मेरी कम से कम पसंदीदा चीजों में से एक है :)

इस को संभालने का सबसे अच्छा तरीका क्या है? मैं देशी रहने को पसंद करता हूं जैसे कि वाइनपेई डेटैट कॉल चूसना

धन्यवाद!


जैसा कि gabr और mliesen द्वारा वर्णित है, DateUtils और SysUtils इकाइयों पर एक नज़र है, उपयोगी कार्यों में शामिल हैं

  • इंकडे - एक दिन जोड़ें या घटाएं।
  • IncMonth - जोड़ें या कई महीनों से घटाना
  • IncWeek - जोड़ें या कई सप्ताह घटाना
  • IncYear - एक जोड़ या कई वर्षों से घटाना
  • एनकोडडेट - वर्ष, महीना और दिन के पाराम से एक टीडीटाटाम मूल्य लौटाता है।

यदि आपके वर्तमान माह के दिन आपके भविष्य के महीनों में मौजूद नहीं है, तो आप क्या करना चाहते हैं? कहो, 31 जनवरी 1 महीने? आपके पास एक ही समस्या है अगर आप साल में वृद्धि करते हैं और आरंभिक तारीख एक लीप वर्ष पर फरवरी 29 है। इसलिए एक सार्वभौमिक IncMonth या IncYear फ़ंक्शन नहीं हो सकता जो कि सभी दिनांकों पर ठीक से काम करेगा।

किसी के लिए दिलचस्पी रखने के लिए, मैं दिल से जूलियन बकलाइन की उन जटिलताओं पर आलेख को अनुशंसा करता हूं जो इस प्रकार की गणना में निहित हैं कि दो तिथियों के बीच महीनों और दिनों की संख्या की गणना कैसे की जाती है।

निम्नलिखित सामान्य दिनांक वृद्धि कार्य संभव है, जो सामान्य तिथि गणित में एनोमोलियों को पेश नहीं करते हैं। लेकिन यह केवल जिम्मेदारी को प्रोग्रामर पर वापस स्थानांतरित करके पूरा करता है, जो संभवत: उस विशिष्ट आवेदन की सटीक आवश्यकताओं की है जो वह प्रोग्रामिंग कर रहा है।

इंकडे - एक दिन जोड़ें या घटाएं।
IncWeek - कई सप्ताह जोड़ें या घटाना

लेकिन यदि आप निर्मित फ़ंक्शंस का उपयोग करना चाहते हैं तो कम से कम यह सुनिश्चित कर लें कि वे जो करना चाहते हैं, वे करते हैं। DateUtils और SysUtils इकाइयों पर एक नज़र डालें इन कार्यों के लिए स्रोत कोड होने से डेल्फी के सबसे अच्छे पहलुओं में से एक है। यह कहने के बाद, यहां कार्यों में निर्मित की पूरी सूची है:

इंकडे - एक दिन जोड़ें या घटाएं।
IncWeek - कई सप्ताह जोड़ें या घटाना
IncMonth - जोड़ें या कई महीनों से घटाना
IncYear - एक जोड़ या कई वर्षों से घटाना

आपके प्रश्न के दूसरे भाग के लिए, एक TDTTime का उपयोग करके सिस्टम दिनांक और समय कैसे सेट किया जाए, किसी अन्य पोस्ट से निम्नलिखित बेशर्मी से चुराए गए कोड कार्य करेगा:

procedure SetSystemDateTime(aDateTime: TDateTime);
var
  lSystemTime: TSystemTime;
  lTimeZone: TTimeZoneInformation;
 begin
  GetTimeZoneInformation(lTimeZone);
  aDateTime := aDateTime + (lTimeZone.Bias / 1440);
  DateTimeToSystemTime(aDateTime, lSystemTime);
  setSystemTime(lSystemTime);
end;

वीसीएल के प्रकार (टीडीटी और टीडीटाटाइम) जो युगल हैं और आप अंकगणितीय कार्यों में उपयोग कर सकते हैं।

एन्कोडोडेट और डिकोडडेट देखें


SysUtils इकाई में बहुत से मददगार हैं (और जैसा कि gabr ने बताया, इसके साथ ही, DateUtils में भी)।





time