उद्देश्य-सी सेटिंग वर्तमान UTC के लिए NSDate


80

क्या NSDateवर्तमान यूटीसी तारीख / समय के साथ एक आसान तरीका है ?


1
चाहेंगे [NSDate date]काम करते हैं? मुझे यकीन नहीं है कि यह यूटीसी है।
zneak

2
NSDateयूटीसी के लिए एक सेट के रूप में ऐसी कोई चीज नहीं है , इसके साथ कोई समयक्षेत्र नहीं जुड़ा है।
निक फोर्ज

3
@ मूरैसैगल आप गलत हैं - NSDateसमय में एक पल का प्रतिनिधित्व करता है (नाम NSDateएक मिथ्या नाम का कुछ है)। जब "1 जनवरी 2001 का पहला इंस्टेंट" जैसे समय का वर्णन करते हैं, तो आपको यह जानने के लिए एक समय क्षेत्र की आवश्यकता होती है कि आप किस समय के बारे में बात कर रहे हैं, लेकिन एक बार NSDateनिर्मित होने के बाद, इससे संबंधित कोई समय क्षेत्र नहीं है।
निक फोर्ज

1
@NickForge एक NSDate को "1 जनवरी 2001 का पहला इंस्टेंट, GMT" के रूप में बनाया गया है, जो एक विशिष्ट समय क्षेत्र में एक विशिष्ट समय है, और यह तथ्य अपरिवर्तनीय और गंभीर रूप से महत्वपूर्ण है कि तिथियां काम क्यों करती हैं। यदि हम अलग-अलग समय क्षेत्रों में हैं और हमने एक ही समय में इसे लॉग किया है, NSLog(@"since1970= %f", [[NSDate date] timeIntervalSince1970]);तो परिणाम समान है। क्यों? क्योंकि यह एक विशिष्ट समय क्षेत्र (GMT) के समय में एक विशिष्ट बिंदु के सापेक्ष है, कोई फर्क नहीं पड़ता कि उपयोगकर्ता कहां है। तथ्य यह है कि यह जीएमटी के सापेक्ष है एक बार बनने के बाद गायब नहीं होता है। इस लंगर के बिना, तिथियां मनमानी होंगी।
मरे सगर्ल

2
@ मूरैसैगल आप दोनों अलग-अलग तरीकों से सही हैं, लेकिन निक यह कहने में अधिक सही है कि " NSDateयूटीसी के लिए एक सेट के रूप में ऐसी कोई चीज नहीं है ", क्योंकि आप ए के समय क्षेत्र को निर्धारित नहीं कर सकते हैं NSDate, और आप यह कहने में गलत हैं। यह "एक समय क्षेत्र है"। यह सच है कि यह एक विशिष्ट समय क्षेत्र के सापेक्ष परिभाषित किया गया है, लेकिन यह कहना "" एक समय क्षेत्र है कि समय क्षेत्र का एक गुण है NSDate, और यह सच नहीं है।
devios1

जवाबों:


148

[NSDate date];

आप एक श्रेणी बनाना चाहते हैं जो कुछ इस तरह से हो:

-(NSString *)getUTCFormateDate:(NSDate *)localDate
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    [dateFormatter setTimeZone:timeZone];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSString *dateString = [dateFormatter stringFromDate:localDate];
    [dateFormatter release];
    return dateString;
}

2
NSTimeZone * timeZone = [NSTimeZone timeZoneWithName: @ "UTC"]; [dateFormatter setTimeZone: timeZone]; उस ने इसे धन्यवाद दिया
ब्रॉडी

1
यदि यह उत्पादन में आगे बढ़ रहा है, तो आप वास्तव में एक स्थिर तारीख बनाना चाहते हो सकता है, जो कि आलसी है, जो आरंभिक है। डेटफ़ॉर्मर का निर्माण वास्तव में कुछ महंगा है।
जेसेक्युर्री

3
मुझे इसकी आवश्यकता है कि दिनांक ऑब्जेक्ट स्ट्रिंग के रूप में नहीं है, मैं इस मामले में क्या कर सकता हूं?
मेस्ट्रो

1
तिथियां समय क्षेत्र से स्वतंत्र होती हैं, समय क्षेत्र का उपयोग केवल मानव उपभोग के लिए उत्पादन करने के लिए किया जाता है।
जेसेक्युरी

@jessecurry बिल्कुल सच नहीं है। NSDate वर्ग संदर्भ से: "यह विधि एक पूर्ण संदर्भ तिथि के सापेक्ष समय मान लौटाती है - 1 जनवरी, GMT का पहला इंस्टेंट।" GMT के स्पष्ट और विशिष्ट संदर्भ पर ध्यान दें।
मरे सगल

13

NSDate एक पूर्ण संदर्भ तिथि, 1 जनवरी, 2001 00:00 GMT से अंतराल का संदर्भ है। तो कक्षा पद्धति [NSDate तारीख] उस अंतराल का एक प्रतिनिधित्व लौटाएगी। उस डेटा को UTC में एक टेक्स्ट फॉर्मेट में प्रस्तुत करने के लिए, बस जरूरत के अनुसार प्रस्तुत करने के लिए उचित NSTimeZone (UTC) के साथ NSDateFormatter का उपयोग करें।


3
मेरा मानना ​​है कि इस उत्तर में [NSDate अब] [NSDate तारीख] होना चाहिए।
फोलेटलेट्स

2

NSDate ऑब्जेक्ट्स किसी विशेष कैलेंड्रिकल सिस्टम या टाइम ज़ोन से स्वतंत्र समय में एक बिंदु को घेरती हैं। दिनांक ऑब्जेक्ट अपरिवर्तनीय हैं, एक निरपेक्ष संदर्भ तिथि के सापेक्ष एक अपरिवर्तनीय समय अंतराल का प्रतिनिधित्व करते हैं ( 1 जनवरी 2001 को 00:00:00 यूटीसी )।

स्विफ्ट संस्करण:

extension NSDate {
    func getUTCFormateDate() -> String {
        let dateFormatter = NSDateFormatter()
        let timeZone = NSTimeZone(name: "UTC")
        dateFormatter.timeZone = timeZone
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return dateFormatter.stringFromDate(self)
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.