2011-10-11 11 views
7

मेरे पास एक ऐसा ऐप है जो कुछ नौका यात्राओं का समय सारिणी प्रदर्शित करता है।एनएसडीएट टाइमज़ोन से स्वतंत्र है?

यदि मैं एक अलग टाइमज़ोन की यात्रा करता हूं - 4 घंटे पीछे कहें, तो 10 बजे नौका यात्रा अब 6 बजे तक दिखाई देती है?

मुझे पता है कि यह उनके टाइमज़ोन के आधार पर तारीखों के साथ कैसे व्यवहार किया जाता है, लेकिन मैं उस व्यवहार को बदलने के तरीके से बाहर नहीं हो सकता। आपकी मदद के लिए अग्रिम में

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"HH:mm"]; 
[self.departureTime setText:[dateFormatter stringFromDate:[self.route objectForKey:@"departureTime"]]]; 
[self.arrivalTime setText:[dateFormatter stringFromDate:[self.route objectForKey:@"arrivalTime"]]]; 
[dateFormatter release]; 

धन्यवाद:

फिलहाल यहाँ कैसे मैं तारीख हो रही है और एक UILabel पर प्रदर्शित है।

+4

समझ लें कि NSDate ही समय क्षेत्र से स्वतंत्र है - यह यूटीसी (ग्रीनविच) समय का प्रतिनिधित्व करता। आपको इच्छित समय क्षेत्र के परिणामों के उत्पादन के लिए NSDateFormatter का टाइमज़ोन सेट करना होगा। –

+3

@DanielRHicks एक तिथि * नहीं * टाइमज़ोन है।यह * यूटीसी का प्रतिनिधित्व नहीं करता है, क्योंकि यूटीसी एक टाइमज़ोन है, और एक तिथि में टाइमज़ोन नहीं है। –

+0

एनएसडीएटी में समय ऑफसेट, सम्मेलन द्वारा, यूटीसी के सापेक्ष समय ऑफसेट है। और NSDateFormatter का टाइमज़ोन सेट करना बेकार होगा यदि एनएसडीएटी ऑब्जेक्ट यूटीसी के सापेक्ष सेट नहीं है। –

उत्तर

7

आप समय क्षेत्र है कि नौका सवारी में हो रहा है की दुकान और उस समय क्षेत्र के लिए यह प्रारूप में तैयार करना होगा।

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"HH:mm"]; 

NSDate *now = [NSDate date]; 
NSLog(@"now:%@", [dateFormatter stringFromDate:now]); 

NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)];  
[dateFormatter setTimeZone:timeZone]; 
NSLog(@"adjusted for timezone: %@", [dateFormatter stringFromDate:now]); 

आउटपुट:

2011-10-10 20:42:23.781 Craplet[2926:707] now:20:42 
2011-10-10 20:42:23.782 Craplet[2926:707] adjusted for timezone: 16:42 
+0

हमें डेलाइट टाइम सेविंग्स को संभालने की आवश्यकता हो सकती है –

0

एक NSDate मूल्य भ्रमित न हों (Btw, मैं चकित अगर वहाँ एक नौका है कि चार समय क्षेत्र को पार शामिल था होगा मेरे लिए एक क्रूज जहाज यात्रा कार्यक्रम की तरह लगता है) NSLog जैसे प्रारूपित आउटपुट के साथ।

NSDate, timeIntervalSinceReferenceDate के एकमात्र आदिम विधि, NSDate इंटरफ़ेस में अन्य सभी तरीकों के लिए आधार प्रदान करता है: NSDate जीएमटी, एप्पल के डॉक्स है। यह विधि एक पूर्ण संदर्भ दिनांक के संबंध में एक समय मान देता है - 1 जनवरी 2001, जीएमटी का पहला तत्काल।

NSTimeInterval referenceInterval = [[dateFormatter dateFromString:@"1 January 2001 GMT"] timeIntervalSinceReferenceDate]; 
NSLog(@"referenceInterval: %f", referenceInterval); 

NSTimeInterval estInterval = [[dateFormatter dateFromString:@"1 January 2001 EST"] timeIntervalSinceReferenceDate]; 
NSLog(@"estInterval:  %f", estInterval); 

आउटपुट:

referenceInterval: 0.000000 
estInterval: 18000.000000 
+0

में संग्रहीत जानकारी की जानकारी जानने के लिए वास्तव में प्रासंगिक नहीं है। दस्तावेज़ीकरण उद्धरण का अर्थ यह नहीं है "एनएसडीएटी जीएमटी है "क्योंकि 1 जनवरी 2001 जीएमटी किसी भी समय क्षेत्र में समान रूप से व्यक्त किया जा सकता है। –

+0

मैं सिर्फ यह समझने की कोशिश कर रहा हूं कि "एनएसडीएटी जीएमटी" का मतलब क्या है, क्योंकि मैं किसी भी तरह से नहीं देख सकता कि एनएसडीएटी मूल्य में किसी भी समय (जीएमटी समेत) प्राथमिकता में एक टाइमज़ोन की कोई आंतरिक धारणा है। इस तथ्य को छोड़कर कि दस्तावेज मनमाने ढंग से जीएमटी में संदर्भ दिनांक उद्धृत करते हैं, और संभवत: एनएसडीएटी एक स्ट्रिंग स्वीकार करते समय जीएमटी के रूप में पहचानने के लिए डिफ़ॉल्ट होगा यदि टाइमज़ोन स्पष्ट रूप से प्रदान नहीं किया गया है। –

+0

निश्चित रूप से हम कर सकते हैं - उदा। यह 1 जनवरी 2001 02:00 बुडापेस्ट समय के सापेक्ष 0.0 ​​है। –

1

तुम भी NSDateComponents वर्ग के रूप में सेब के संदर्भ द्वारा वर्णित का उपयोग कर सकते हैं:

आप एक तिथि समय क्षेत्र से स्वतंत्र है कि बनाने के लिए की जरूरत है आप कर सकते हैं, तिथि को NSDateComponents ऑब्जेक्ट के रूप में संग्रहीत करें-जब तक आप संबंधित कैलेंडर में कुछ संदर्भ संग्रहीत करते हैं।

आईओएस में, NSDateComponents ऑब्जेक्ट्स में कैलेंडर, एक टाइमज़ोन और डेट ऑब्जेक्ट हो सकता है। इसलिए आप कैलेंडर को घटकों के साथ स्टोर कर सकते हैं। यदि आप तिथि तक पहुंचने के लिए NSDateComponents क्लास की दिनांक विधि का उपयोग करते हैं, तो सुनिश्चित करें कि संबंधित टाइमज़ोन अद्यतित है।

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtTimeZones.html#//apple_ref/doc/uid/20000185-SW1

-1
 NSDate *currentDateTime = datePicker.date; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"EEE,MM-dd-yyyy HH:mm:ss"]; 
     NSString *dateInStringFormated = [dateFormatter stringFromDate:currentDateTime]; 
     NSLog(@"%@", dateInStringFormated); 
संबंधित मुद्दे