2010-08-02 10 views
5

से दिनांक भाग प्राप्त करें मैं एक यूआईडीएटीपीकर का उपयोग कर रहा हूं और मुझे इस डेटा को सिस्टम में कनवर्ट करने में समस्याएं आ रही हैं। मोनो टच में डेटटाइम मान। एनएसडीएटी से डेटटाइम के रूपांतरणों में समस्याएं हैं, जिन्हें मैंने ज्यादातर हल किया है, लेकिन अब मैं देखता हूं कि यदि आप एक ऐसी तारीख चुनते हैं जो उसी डेलाइट सेविंग टाइम अवधि में नहीं है तो आप एक घंटा दूर हैं। उदाहरण के लिए, यदि मैं जनवरी 2010 में एक तारीख चुनता हूं तो मुझे ऑफसेट समस्या होगी।एनएसडीएटी मूल्य

मैं क्या करना चाहता हूं जब कोई उपयोगकर्ता UIDatePicker से दिनांक/समय चुनता है, तो एनएसडीएटी का वर्ष, महीना, दिन, घंटा और मिनट मूल्य प्राप्त करना है और बस एक नई प्रणाली बनाएं। डेटटाइम उन मानों और मुझे हमेशा एक तारीख मूल्य प्राप्त करने का आश्वासन दिया जाएगा जैसा उपयोगकर्ता यूआईडीएटीपीकर में देखता है।

मैं विभिन्न दिनांक भागों में एनएसडीएटी मूल्य को कैसे तोड़ सकता हूं?

धन्यवाद।

+0

यदि कोई मुझे मोनो टच का उपयोग करके NSDateComponents को समझने में मेरी सहायता कर सकता है तो मैं इसकी सराहना करता हूं। मुझे अभी भी यह पता नहीं लगा है कि यह कैसे करें। नमूना कोड की सराहना की जाएगी। धन्यवाद! – Neal

उत्तर

2

ऐसा प्रतीत होता है कि यह NSDateComponents के उदाहरण का उपयोग करके किया जा सकता है। निम्नलिखित Date Components and Calendar Units से कॉपी किया गया है:

घटक घटकों में एक तारीख विघटित करने के लिए आपको NSCalendar विधि घटकों का उपयोग: FROM :. में तिथि के अलावा, आपको की आवश्यकता है ताकि एनएसडीएट कॉम्पोनेंट्स ऑब्जेक्ट में लौटाए गए घटकों को निर्दिष्ट किया जा सके। इसके लिए, विधि कैलेंडर इकाइयों स्थिरांक से बना बिट मास्क लेता है। को में से किसी भी अन्य घटक को निर्दिष्ट करने की आवश्यकता नहीं है, जिसमें आप रुचि रखते हैं। लिस्टिंग 3 दिखाती है कि आज के दिन और सप्ताहांत की गणना कैसे करें।

लिस्टिंग 3 हो रही एक तिथि के घटकों

NSDate *today = [NSDate date]; 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today]; 
NSInteger day = [weekdayComponents day]; 
NSInteger weekday = [weekdayComponents weekday]; 
1
public static DateTime NSDateToDateTime(MonoTouch.Foundation.NSDate date) 
{ 
    return (new DateTime(2001,1,1,0,0,0)).AddSeconds(date.SecondsSinceReferenceDate); 
} 

public static MonoTouch.Foundation.NSDate DateTimeToNSDate(DateTime date) 
{ 
    return MonoTouch.Foundation.NSDate.FromTimeIntervalSinceReferenceDate((date-(new DateTime(2001,1,1,0,0,0))).TotalSeconds); 
} 

ठीक ऊपर कोड आप दिनांक समय में NSDate बारी एक के रूप में आप सामान्य रूप से नेट विश्व :) पर क्या कर सकते हैं का उपयोग करके तो> DateTimeToNSDate साथ आप एक NSDate

आशा करने के लिए इसे वापस कर सकते हैं इस में मदद करता है

एलेक्स

4

डेलाइट सेविंग टाइम समस्याओं से छुटकारा पाने का एक आसान तरीका समय क्षेत्र को जीएमटी में सेट करना है। तब UIDatePicker डेलाइट बचत समय पर ध्यान नहीं देगा: करने के लिए और से दिनांक समय Monotouch में काफी अच्छा है NSDate की

_datePicker.TimeZone = NSTimeZone.FromAbbreviation("GMT"); 

अंतर्निहित रूपांतरण है, लेकिन जैसा कि आप जानते होना चाहिए NSDate हमेशा एक UTC समय और दिनांक समय DateTimeKind को डिफ़ॉल्ट सेट है। निर्दिष्ट (डेटाबेस से पढ़ते समय) या DateTimeKind.Locale (दिनांक दिनांक के साथ सेट करें। आज)। सबसे अच्छा तरीका जटिल समय-क्षेत्र की संगणना के बिना धर्मांतरण का अधिकार DateTimeKind मजबूर करने के लिए है:

// Set date to the date picker (_date is a DateTime with time part 0:00:00): 
    _datePicker.Date = DateTime.SpecifyKind(_date, DateTimeKind.Utc); 

    // Get the date from the date picker: 
    _date = DateTime.SpecifyKind(_datePicker.Date, DateTimeKind.Unspecified); 

यह आसान है और अलग-अलग दिन, महीना और वर्ष मूल्यों हो रही तुलना में अधिक विश्वसनीय है।

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