2012-06-26 23 views
6

को मैं vb में निम्न कोड है -DATEADD और स्वरूप कोड परिवर्तित VB6 से सी #

tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT)) 

मैं सी # में परिवर्तित करने का प्रयास कर रहा हूँ।

मैं इस अब तक परिवर्तित कर दिया है -

tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT)); 

लेकिन मैं DateAdd() या Format() सुविधा के लिए एक स्थानापन्न नहीं मिल रहा।

कोई विचार? धन्यवाद।

+6

आप क्या हासिल करने की कोशिश कर रहे हैं? यदि आप हमें बता सकते हैं, तो आपको केवल उन लोगों की आवश्यकता होगी जो .NET को जानते हैं, न कि लोग जो .NET * और * VB6 जानते हैं। –

उत्तर

11

DateAdd एक पुरानी वीबी 6 विधि है जो पिछली संगतता के लिए वीबीएनईटी में ले जाया गया था। यदि आप अपने सी # प्रोजेक्ट में Microsoft.VisualBasic नेमस्पेस शामिल करते हैं, तो आप इसे सी # में काम करने के लिए भी प्राप्त कर सकते हैं, लेकिन मैं सी # या वीबी.नेट में विधि का उपयोग करने की अनुशंसा नहीं करता।

tAvailableDate = DateTime.Now.AddDays(21); 
+0

यह पूरी तरह से काम करता है। धन्यवाद। एक फॉलो अप के रूप में मेरे पास एक एसक्यूएल स्ट्रिंग (अभी भी vb6) में है - प्रारूप (tAvailableDate, gDATEFORMAT) सी # के लिए मैं बस इसे बना सकता हूं - tAvailableDate। ? –

+0

एक 'डेटटाइम' ऑब्जेक्ट को स्ट्रिंग में कनवर्ट करने के लिए, 'ToString' विधि का उपयोग करें, जैसे: 'tAvailableDate.ToString (gDATEFORMAT)' –

+0

ठीक है। सहायता के लिए धन्यवाद। –

10

मेरा वीबी 6 थोड़ा जंगली है, लेकिन अगर मुझे याद है, तो आप 21 दिनों को जोड़ने की कोशिश कर रहे हैं। तो यहाँ है कि आप क्या करना चाहते हैं:

tAvailableDate = DateTime.Now.AddDays(21); 

अद्यतन

आपने कहा है कि आप एक string से एक DateTime चर बदल दिया। यदि आप एक string करने के लिए इसे वापस पाने के लिए (जो यह एक और टिप्पणी से है जैसे आप हो सकता है दिखता है) की जरूरत है, तो आप कॉल करना चाहते हैं:

tAvailableDate.ToString("[format string]"); 

अपने स्ट्रिंग जिस तरह से आप चाहते हैं फ़ॉर्मेट करने की मदद के लिए, देखें: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

+2

+1। हां, प्रारूप के साथ स्ट्रिंग में कनवर्ट करने और फिर दिनों को जोड़ने का प्रयास करने का कोई मतलब नहीं है। तारीखों को दिनों में जोड़ा जा सकता है लेकिन तारों के लिए नहीं। शायद यह वीबी 6 के साथ काम करता है, बीक्यूज वीबी 6 स्वचालित रूप से स्ट्रिंग को 'डेट' में बदल देता है और इस प्रकार इस त्रुटि को मास्क करता है! लेकिन अगर यह 'gDATEFORMAT' में निर्दिष्ट की तुलना में किसी अन्य संस्कृति का उपयोग करके इसे वापस परिवर्तित करता है तो यह एक त्रुटि उत्पन्न कर सकता है (उदाहरण के लिए दिनों और महीनों को बदलकर)। –

+0

आपकी मदद के लिए धन्यवाद। वह कोड पूरी तरह से काम किया। मेरे सी # कोड लिखते समय वीबी 6 में प्रारूप को दूर करने के लिए मैंने एक स्ट्रिंग के विपरीत दिनांक दिनांक के रूप में दिनांक दिनांक के रूप में घोषित किया। –

+0

अनुवर्ती के रूप में मेरे पास एक एसक्यूएल स्ट्रिंग (अभी भी vb6) में है - प्रारूप (tAvailableDate, gDATEFORMAT) सी # के लिए मैं बस इसे बना सकता हूं - tAvailableDate। ? –

0

मैं आपकी समस्या को खत्म हो गया सोचा है और वहाँ एक पहलू यह है कि मैं कल याद है: यहाँ आप यह कैसे (यह भी पढ़ने में आसान है) करना चाहिए है। मैंने सोचा कि Format फ़ंक्शन को कोई समझ नहीं आया, लेकिन अगर यह अजीब लग रहा है, तो यह समझ में आता है। मुझे समझाने दो।

VB6 में हम

tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT)) 

क्यों यह अजीब है (या गलत) दिखता है है? Now एक Date है। Format इस तारीख को String (अच्छी तरह से Variant में String समेत सटीक होने के लिए परिवर्तित करता है), लेकिन DateAdd को Date पैरामीटर की आवश्यकता है ताकि दिनों को जोड़ने में सक्षम हो सके। DateAdd इस तरह घोषित किया जाता है:

Function DateAdd(Interval As String, Number As Double, Date) 

इसके बजाय एक चेतावनी या एक संकलक त्रुटि देने की, VB6 चुपचाप इस स्ट्रिंग वापस एक Date में धर्मान्तरित और DateAdd को पास कर देता। तो मेरी पहली धारणा सिर्फ Format को छोड़ना था।

लेकिन Format पर gDATEFORMAT परिभाषित किया गया है, इस परिणाम पर वांछित प्रभाव हो सकता है। यदि gDATEFORMAT में केवल एक दिनांक भाग है, तो प्रारूप फ़ंक्शन समय भाग छोड़ देगा!हालांकि यह केवल .NET (C# या VB.NET) में VB6

tAvailableDate = DateAdd("d", 21, Date) 

या DateTime.Today में Date समारोह का उपयोग कर के बजाय Now फ़ंक्शन का उपयोग करके प्राप्त किया जा सकता है।

लेकिन gDATEFORMAT में केवल महीने और वर्ष हो सकता है। VB6 (मेरी स्विस स्थान का प्रयोग करके):

Date ==> 27.06.2012 
Format(Date,"MM.yyyy") ==> "06.2012" 
CDate(Format(Date,"MM.yyyy")) ==> 01.06.2012 

आप देख सकते हैं, तारीख स्वरूपण इस मामले में वर्तमान महीने के पहले दिन वापस जाने के लिए प्रभाव होगा। 21 दिनों को जोड़कर आप हमेशा चालू महीने का 22 वां प्राप्त करेंगे। वर्तमान तारीख में 21 दिन जोड़ने से यह काफी अलग है! सी # में आप क्रम तय करने के लिए जो दृष्टिकोण सही है

DateTime today = DateTime.Today; 
tAvailableDate = new DateTime(today.Year, today.Month, 22); 

के साथ एक ही लक्ष्य को हासिल कर सकता है, आपको पता होना चाहिए या तो क्या gDATEFORMAT शामिल है या, अगर यह परिवर्तनशील है, दिनांक स्वरूप और फिर जिसके परिणामस्वरूप स्ट्रिंग पार्स एक पाने के लिए फिर से तारीख