NSDate को यूनिक्स टाइमस्टैम्प iphone sdk में कैसे बदलें?


143

कैसे NSDateयूनिक्स टाइमस्टैम्प में परिवर्तित करने के लिए ? मैंने कई पोस्ट पढ़ी हैं जो रिवर्स करती हैं। लेकिन मुझे अपने प्रश्न से संबंधित कुछ भी नहीं मिल रहा है।

जवाबों:


269

मेरा मानना ​​है कि यह NSDate का चयनकर्ता है जिसे आप देख रहे हैं:

- (NSTimeInterval)timeIntervalSince1970

2
क्या यह एक यूनिक्स टाइमस्टैम्प लौटाता है अगर nsdate के साथ प्रदान किया जाता है?
नेहा

1
हां, यह वही है जो आप देख रहे हैं। 1 जुलाई 1970 से UNIX सेकंड में समय को मापता है, और यह विधि रिसीवर (NSDate जो आप प्रदान करते हैं) और 1 जनवरी 1970 के पहले इंस्टेंट, GMT के बीच का अंतराल लौटाता है। NSTimeInterval वास्तव में दोहरे का एक प्रकार है।
बॉनडॉन्स्की

26
एक तार पाने के लिए (28/11/2011 14:14:13 <-> 1322486053): [NSString stringWithFormat: @ "%। 0f", [aDate timeIntervalSince1970]];
--16।

2
विधि को सामान्य रूप से डिवाइस पर निर्धारित समय से बदल दिया जाता है। मैंने एक परीक्षण किया जहां मुझे 12pm पर टाइमस्टैम्प मिला, फिर iPad पर समय लगभग 8:00 बजे बदल गया और दो संख्याओं में अंतर बहुत अधिक था। यदि टाइमस्टैम्प कोई डिवाइस समय पर निर्भर नहीं था, तो संख्या मात्र सेकंड से बंद होनी चाहिए थी, लेकिन इस मामले में मुझे यह निष्कर्ष निकालना पड़ा कि iPad पर समय unixTimeStamp को प्रभावित करता है
Esko918

1
@ Esko918 बेशक। यूनिक्स समय 1970 से उस बिंदु तक सेकंड की संख्या का वर्णन करता है जब आप उस समय को निर्दिष्ट करना चाहते हैं ("अब इस मामले में")। यदि आप अपने iPad पर समय बदलते हैं, तो आप प्रभावी रूप से "अब" को किसी अन्य समय में बदल देते हैं और इसलिए समय टिकटों में अंतर होता है।
मर्सबियर

69

एक यूनिक्स टाइमस्टैम्प 00:00:00 यूटीसी 1 जनवरी, 1970 के बाद से सेकंड की संख्या है। यह टाइप टाइम_ टी द्वारा दर्शाया गया है , जो आमतौर पर एक हस्ताक्षरित 32-बिट पूर्णांक प्रकार (लंबा या इंट) है।

iOS प्रदान करता है - (NSTimeInterval) timeIntervalSince1970 NSDate ऑब्जेक्ट्स के लिए जो 00:00:00 GMT 1 जनवरी, 1970 के बाद से सेकंड की संख्या देता है। NSTimeInterval एक डबल फ़्लोटिंग पॉइंट प्रकार है जिससे आपको सेकंड के सेकंड और अंश मिलते हैं।

चूंकि वे दोनों एक ही संदर्भ (आधी रात 1J1970 UTC) हैं और दोनों सेकंड में रूपांतरण आसान है, NSTimeInterval को अपनी आवश्यकताओं के आधार पर time_t, गोलाई या काट-छाँट में परिवर्तित करें:

time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];

यह फ़ंक्शन मुझे सही तारीख दिखाता है लेकिन समय गलत है। यह सिस्टम के समय से मेल नहीं खाता है।
नेहा

यूनिक्स समय यूटीसी (जीएमटी) है, भारत यूटीसी + 5.5 है। क्या यह 5.5 घंटे से बंद है?
progrmr

7
आपके सिस्टम का समय आपके स्थानीय समय क्षेत्र में समय दिखा रहा है, जो ठीक है। यूनिक्स टाइमस्टैम्प स्थानीय समय नहीं है, यह हमेशा यूटीसी समय होता है, यह भारत में +5: 30 से भिन्न होता है, यहाँ से -7: 00 है। यह सही है।
progrmr

लेकिन फिर इसका उपयोग कैसे करें? क्या मैं बाद में अपनी गणना में इसका उपयोग कर सकता हूं? मैं एक PHP डेटाबेस से एक UNIX टाइमस्टैम्प ऑनलाइन और फिर यह एक है। मैं किसी वस्तु के बारे में नवीनतम डेटा डाउनलोड करने का निर्णय लेने के लिए दोनों की तुलना करना चाहता हूं।
जीरोनीजखोफ

मैं अभी यह कर रहा हूँ: int unixTime = floor([piece.piece_last_view timeIntervalSince1970]) जहाँ piece.piece.last_view एक NSDate है
JeroenEijkhof

26

आप इस तरह से एक तारीख से एक यूनिक्स टाइमस्टैम्प तिथि बना सकते हैं:

NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];

21
यह गलत है, timeIntervalSince1970 एक TimeInterval देता है जो वास्तव में एक डबल है।
मैट वोल्फ

9
- (void)GetCurrentTimeStamp
    {
        NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
        [objDateformat setDateFormat:@"yyyy-MM-dd"];
        NSString    *strTime = [objDateformat stringFromDate:[NSDate date]];
        NSString    *strUTCTime = [self GetUTCDateTimeFromLocalTime:strTime];//You can pass your date but be carefull about your date format of NSDateFormatter.
        NSDate *objUTCDate  = [objDateformat dateFromString:strUTCTime];
        long long milliseconds = (long long)([objUTCDate timeIntervalSince1970] * 1000.0);

        NSString *strTimeStamp = [Nsstring stringwithformat:@"%lld",milliseconds];
        NSLog(@"The Timestamp is = %@",strTimestamp);
    }

 - (NSString *) GetUTCDateTimeFromLocalTime:(NSString *)IN_strLocalTime
    {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSDate  *objDate    = [dateFormatter dateFromString:IN_strLocalTime];
        [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
        NSString *strDateTime   = [dateFormatter stringFromDate:objDate];
        return strDateTime;
    }

नोट: - टाइमस्टैम्प UTC ज़ोन में होना चाहिए, इसलिए मैं हमारे स्थानीय समय को UTC समय में परिवर्तित करता हूँ।


6

तीव्र

स्विफ्ट 3 के लिए अपडेट किया गया

// current date and time
let someDate = Date()

// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970

टिप्पणियाँ

  • timeIntervalSince1970रिटर्न TimeInterval, जो के लिए एक typealias है Double

  • यदि आप दूसरे तरीके से जाना चाहते हैं तो आप निम्न कार्य कर सकते हैं:

      let myDate = Date(timeIntervalSince1970: myTimeStamp)

5

यदि आप इन समय को डेटाबेस में स्टोर करना चाहते हैं या सर्वर पर भेजना चाहते हैं ... तो सबसे अच्छा यूनिक्स टाइमस्टैम्प का उपयोग करना है। यहाँ एक छोटा सा टुकड़ा है कि पाने के लिए:

+ (NSTimeInterval)getUTCFormateDate{

    NSDateComponents *comps = [[NSCalendar currentCalendar] 
                               components:NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit 
                               fromDate:[NSDate date]];
    [comps setHour:0];
    [comps setMinute:0];    
    [comps setSecond:[[NSTimeZone systemTimeZone] secondsFromGMT]];

    return [[[NSCalendar currentCalendar] dateFromComponents:comps] timeIntervalSince1970];  
}

आप घटकों में घंटे और मिनट 0 सेट क्यों कर रहे हैं? इसके अलावा, यह आपको सटीक UTC कैसे देगा [[NSTimeZone systemTimeZone] secondsFromGMT]]? कृपया थोड़ा समझाइए।
हेमांग

हाय दोस्त इसने मेरी मदद की
राहुल के राजन


4

नीचे दिए अनुसार UNIX समय फ़ंक्शन का उपयोग करते हुए @ kexik के सुझाव के अनुसार:

  time_t result = time(NULL);
  NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);

मेरे अनुभव के अनुसार। समय का उपयोग न करें। IntervalSince1970, यह एपोक टाइमस्टैम्प देता है - आप जीएमटी के साथ केवल कुछ सेकंड की संख्या।

[[NSDate date] timeIntervalSince1970] के साथ एक बग हुआ करता था, यह फोन के टाइमज़ोन पर आधारित समय को जोड़ने / घटाना करता था लेकिन अब यह हल हो गया है।


मैं अपना जवाब सही कर रहा हूं - यह वास्तव में बराबर लगता है। हालांकि समय (NULL) थोड़ा तेज हो सकता है क्योंकि यह obj-c रनटाइम नहीं कह रहा है। : P टेस्ट कोड NSLog (@ "time (NULL) =% d; timeIntervalSince1970 =% d", (int) time (NULL), (int) [[NSDate date] timeIntervalSince1970];
k3a

मुझे [[NSDate date] timeIntervalSince1970] के साथ समस्याओं का सामना करना पड़ा है। वे जिस क्षेत्र में भी हैं, उस पर विचार करने लगते हैं।
तपन ठाकर

हां, यह वही है जो मुझे लगता है कि मैंने उस दिन अनुभव किया था, लेकिन iOS7 सिम्युलेटर और iOS6 डिवाइस पर GMT + 2
टाइमज़ोन के

2
 [NSString stringWithFormat: @"first unixtime is %ld",message,(long)[[NSDate date] timeIntervalSince1970]];

 [NSString stringWithFormat: @"second unixtime is %ld",message,[[NSDate date] timeIntervalSince1970]];

 [NSString stringWithFormat: @"third unixtime is %.0f",message,[[NSDate date] timeIntervalSince1970]]; 

पहला अविजित 1532278070

दूसरा यूनिक्स 1532278070.461380

तीसरा यूनिक्स 1532278070


0

यदि आपको स्ट्रिंग के रूप में समय टिकट की आवश्यकता है।

time_t result = time(NULL);                
NSString *timeStampString = [@(result) stringValue];
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.