मेरे पास ईएसटी टाइमज़ोन में एक समय है, यह MySQL सर्वर पर अब() फ़ंक्शन का उपयोग करके किया जाता है। क्योंकि मेरा सर्वर ईएसटी में स्थित है, संग्रहीत समय ईएसटी में है। जब मैं इसे अपने ऐप से आईफोन पर पुनर्प्राप्त करता हूं, तो मुझे इसे उपयोगकर्ता के सही समय क्षेत्र में प्रदर्शित करने की आवश्यकता होती है। मैं उसको कैसे करू?आईफोन डिवाइस के समय क्षेत्र में समय कैसे परिवर्तित करें?
20
A
उत्तर
3
मुझे लगता है कि यह ईएसटी द्वारा आपके मतलब के आधार पर निर्भर करता है - यदि आपका मतलब पूर्वी तट अमेरिका है, तो सामान्यतः, यह यूटीसी के पीछे 5 घंटे (लेकिन डेलाइट सेविंग के लिए लेखांकन नहीं) है, जो आपको 04:00 ईएसटी देना चाहिए। जहां संभव हो संक्षेप में प्रयोग करने से बचने की कोशिश करें, क्योंकि वे संदिग्ध हैं, उदा। ईएसटी अमेरिका/डेट्रॉइट और ऑस्ट्रेलिया/सिडनी दोनों का संक्षिप्त नाम है। NSTimeZone initWithName का उपयोग करने से अधिक सटीक परिणाम मिलेंगे।
Chronos Time Zone Repository एक अच्छी तरह से पठनीय एक्सएमएल टाइमज़ोन डेटाबेस प्रदान करता है जो वास्तव में यह समझने में सहायता करता है कि समय क्षेत्र कैसे काम करता है (यह सब गन्दा और परिवर्तनीय है)।
3
// आप एक समय क्षेत्र के लिए तिथि परिवर्तित करने के लिए नीचे दिए गए समारोह का उपयोग कर सकते तुम चाहो
+ (NSDate *) convertDate:(NSDate *) date toTimeZone:(NSString *) timeZoneAbbreviation {
NSTimeZone *systemZone = [NSTimeZone systemTimeZone];
NSTimeZone *zoneUTC = [NSTimeZone timeZoneWithAbbreviation:timeZoneAbbreviation];
NSTimeInterval s = [zoneUTC secondsFromGMT];
NSTimeZone *myZone = [NSTimeZone timeZoneWithAbbreviation:[systemZone abbreviationForDate:date]];
NSTimeInterval p = [myZone secondsFromGMT];
NSTimeInterval i = s-p;
NSDate *d = [NSDate dateWithTimeInterval:i sinceDate:date];
return d;
}
//Test case **note** cgUtil is the class this method is written thus change it accordingly
__block NSDate *now = [NSDate date];
NSLog(@"Current time:%@", now);
[[[NSTimeZone abbreviationDictionary] allKeys] enumerateObjectsUsingBlock:^(NSString * abb, NSUInteger idx, BOOL *stop) {
NSLog(@"Time zone abb:%@:Time:%@",abb,[cgUtil convertDate:now toTimeZone:abb]);
}];