2010-04-05 10 views
82

एक साधारण चीज़ की तरह लगता है लेकिन मुझे ऐसा करने का कोई तरीका नहीं दिख रहा है।आईफोन ओएस: मैं एक विशिष्ट तारीख के लिए एनएसडीएट कैसे बना सकता हूं?

कुछ अलग-अलग तरीकों को देखना बहुत अच्छा होगा।

उत्तर

194

@ चक का जवाब सही है, और मुझे निम्नलिखित कोड पर ले जाएं। सोचा था कि मैं हिस्सा चाहते हैं:

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setDay:10]; 
[comps setMonth:10]; 
[comps setYear:2010]; 
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps]; 
+7

ध्यान दें कि बेहतर ग्रैन्युलरिटी के लिए 'setHour',' setMinute', 'setSecond' आदि भी है। – devios1

8

NSDate के लिए प्रलेखन देखें। आप NSDateFormatter की विधि या NSCalendar की dateFromComponents: विधि का उपयोग कर सकते हैं।

+0

मुझे यह तिथि मिल रही है: "1 9 6 9-12-31 16:00:00" -0800 स्ट्रिंग – nickthedude

+0

एनएसडीएटीफॉर्मेटर * डेटफॉर्मेटर = [[एनएसडीएटीफॉर्मेटर एलोक] init] से तारीख का उपयोग करते समय; एनएसडीएटी * कैप्चरस्टार्टडेट = [डेटफॉर्मेटर डेट फ्रॉमस्ट्रिंग: @ "2 जनवरी, 2001"]; एनएसएलओजी (@ "% @", [कब्जा स्टार्टडेट विवरण]); उत्पादन: 2010-04-05 10: 49: 47.688 कैलेंडर CALENDAR2 [21,339: 207] 1969-12-31 16:00:00 -0800 – nickthedude

+0

शायद तुम मैदान के स्वरूपित तारीख को कुछ मानकों सेट करने के लिए बजाय जरूरत 'init'? – zoul

16

यदि आप यूनिक्स तिथि की बजाय किसी विशिष्ट कैलेंडर तिथि के बारे में बात कर रहे हैं, तो शायद आप एनएससीएंडेंडर के dateFromComponents: चाहते हैं।

18

आप इस

NSString *dateString = @"03-Sep-11"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"dd-MMM-yy"; 
NSDate *date = [dateFormatter dateFromString:dateString]; 

आशा इस तुम बाहर में मदद मिलेगी का उपयोग कर सकते हैं।

+0

"dateFromString" फ़ंक्शन का उपयोग करके सावधान रहें - मैंने पाया कि कुछ पूर्ण-मान्य तिथियों के साथ, यह दुर्भाग्य से विफल हो जाएगा। पार्सिंग डेट स्ट्रिंग के वैकल्पिक तरीके के लिए नीचे दी गई मेरी पोस्ट देखें। –

+0

ओडेड बेन का उल्लेख करने का तरीका भी एक और सबसे अच्छा तरीका है ..... NSDateComponents * comps = [[NSDateComponents alloc] init]; [comps setDay: 10]; [comps setMonth: 10]; [comps setYear: 2010]; एनएसडीएटी * दिनांक = [[एनएससीएंडेंडर वर्तमान कैलेंडर] दिनांकप्रोमकंपोनेंट्स: comps]; – kamleshwar

2

यह हास्यास्पद है, है ना?

मध्य -2013 और ऐप्पल अभी भी ने NSDate मान सेट करने का एक आसान तरीका प्रदान नहीं किया है।

मेरे वर्तमान आईपैड प्रोजेक्ट के दौरान, मुझे विश्वास नहीं था कि मुझे एनएसडीएटी से वर्ष मूल्य प्राप्त करने के लिए अपनी खुद की सहायक कक्षा लिखने के लिए थोड़ी देर के लिए उत्पादकता को रोकना पड़ा। मेरा मतलब है, चलो, यह मूल सामान है।

वैसे भी, यहाँ सहायक वर्ग मैं अपने प्रोजेक्ट में इस्तेमाल किया, एक NSDate मूल्य में एक स्ट्रिंग परिवर्तित करने के लिए है:

NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"]; 
:

@implementation DateHelper 

+(NSDate*)parseDateString:(NSString *)dateString 
{ 
    NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init]; 
    [rfc3339TimestampFormatterWithTimeZone setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
    [rfc3339TimestampFormatterWithTimeZone setDateFormat:@"MMM dd, yyyy"]; 

    NSDate *theDate = nil; 
    NSError *error = nil; 
    if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:dateString range:nil error:&error]) { 
     NSLog(@"Date '%@' could not be parsed: %@", dateString, error); 
    } 

    return theDate; 
} 

@end 

इस कोड का उपयोग करना, आप की तरह कुछ का उपयोग कर एक NSDate मूल्य सेट कर सकते हैं

नोट: https://stackoverflow.com/a/3968411/391605

मेरे समाधान था: इस समारोह यहां से लिया कोड पर आधारित था निम्नलिखित कोड का उपयोग करने के लिए रहा है, लेकिन मुझे लगता है कि कभी-कभी, यह सिर्फ पार्स नहीं करेगा, और शून्य वापस करेगा।

// Take a date string in the format "Oct 23, 2013", and convert it into a NSDate value 
// THIS DOESN'T WORK ! DON'T TRUST THIS CODE !! 
NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"MMM dd, yyyy"]; 
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

NSDate* date = [formatter dateFromString:dateString]; 

मुझे याद है उस पर बुरी तरह विफल "अक्टू 12, 2012" ... जिसके कारण मैं छोड़ दिया और अधिक जटिल "parseDateString" समारोह ऊपर दिखाए इस्तेमाल किया।

मेरा मुद्दा है ... सावधान रहें।

बहुत-बुनियादी NSDate कार्यों में से कुछ अभी ठीक से काम नहीं ...

3

मैं जबकि इस प्रश्न का उत्तर की तलाश में इस सूत्र पाया लेकिन फिर मैं एक मेरा बड़ा बेवकूफ Ranch में एक अच्छा उदाहरण पाया उद्देश्य-सी प्रोग्रामिंग पुस्तक। उन्हें श्रेय, मुझे नहीं।

NSDateComponents *myBDay =[[NSDateComponents alloc] init]; 
    [myBDay setDay:22]; 
    [myBDay setMonth: 04]; 
    [myBDay setYear: 1984]; 
    [myBDay setHour:9]; 
    [myBDay setMinute:25]; 
    [myBDay setSecond:35]; 

    NSCalendar *g = [[ NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
    NSDate *dateOfBirth = [g dateFromComponents:myBDay]; 
6

स्विफ्ट उदाहरण

उदाहरण अक्सर सबसे आसान तरीका जानने के लिए कर रहे हैं। कुछ उदाहरण निम्नलिखित हैं।

अब

यह सबसे आसान है।

let currentDateTime = Date() 

फरवरी 20, 2017

// Specify date components 
var dateComponents = DateComponents() 
dateComponents.year = 2017 
dateComponents.month = 2 
dateComponents.day = 20 

// Create date from components 
let userCalendar = Calendar.current // user calendar 
let dateThisPostWasUpdated = userCalendar.date(from: dateComponents) 

1 अप्रैल, 1976

// Specify date components 
var dateComponents = DateComponents() 
dateComponents.year = 1976 
dateComponents.month = 4 
dateComponents.day = 1 

// Create date from components 
let userCalendar = Calendar.current // user calendar 
let appleFoundedDate = userCalendar.date(from: dateComponents) 

अधिक विवरण की आवश्यकता ...?

तिथियां बनाने के अन्य तरीके भी हैं। यदि आप उन लोगों को सीखना चाहते हैं, साथ ही साथ एक तिथि, तो see my fuller answer प्रदर्शित करें।

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