2010-01-09 11 views
20

का उपयोग करते हुए अलग-अलग दिनांक समय प्रारूपों को कैसे प्रबंधित करें मेरे पास एक डेटाटाइम प्रारूप वाला स्ट्रिंग है: "वाई वाई वाई-एमएम-डीडी एचएच: एमएम: एसएस"।NSDateFormatter

मैं अपने स्रोत कोड में इस का उपयोग करें:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"%e. %B %Y"]; 
NSString *test = [formatter stringFromDate:@"2010-01-10 13:55:15"]; 

मैं "2010-01-10 13:55:15" "10 जनवरी 2010" से परिवर्तित करना चाहते हैं। लेकिन मेरा कार्यान्वयन काम नहीं करता है।

क्या गलत है?

धन्यवाद अग्रिम & सर्वश्रेष्ठ सादर।

अपडेट किया गया स्रोत कोड:

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"%Y-%m-%d %H:%M:%S"]; 
NSString *test1 = [formatter stringFromDate:@"2010-01-10 13:55:15"]; 

NSDateFormatter *formatter1 = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter1 setDateFormat:@"%d. %M4 %Y"]; 
NSString *test2 = [formatter1 stringFromDate:test1]; 
+0

pueden ayudarme चोर एस्तन सवाल http हो जाएगा।कॉम/प्रश्न/15162835/कैसे-से-उपयोग-एनएसडेटेटफॉर्मर-टू-वेनेजुएला gracias – tony

उत्तर

32

एक तारीख फ़ॉर्मेटर एक बार में केवल एक प्रारूप संभाल कर सकते हैं। आप इस दृष्टिकोण लेने की जरूरत: // stackoverflow:

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
[f setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *date = [f dateFromString:@"2010-01-10 13:55:15"]; 

NSDateFormatter *f2 = [[NSDateFormatter alloc] init]; 
[f2 setDateFormat:@"d. MMMM YYYY"]; 
NSString *s = [f2 stringFromDate:date]; 

रों अब "10 जनवरी 2010"

+3

स्वरूपकों को जारी करना याद रखें – user102008

1

आप [NSFormatter dateFromString:] उपयोग करने के लिए एक NSDate उदाहरण के लिए अपने स्ट्रिंग आधारित तिथि परिवर्तित करना चाहते हैं। वहां से NSDate के साथ stringFromDate का उपयोग करना चाहते हैं, जैसा ऊपर आपने लिखा है स्ट्रिंग नहीं। मैं पार्सिंग और स्वरूपण दोनों के लिए एक ही NSDateFormatter का उपयोग करने के बारे में निश्चित नहीं हूं - आपको विभिन्न प्रारूप शैलियों को संभालने के लिए दो अलग-अलग उदाहरणों की आवश्यकता हो सकती है।

+0

आपका मतलब NSDateFormatter है? मुझे लगता है कि ये विधियां केवल आईफोन ओएस एक्स में उपलब्ध नहीं हैं। आप मैक ओएस एक्स संदर्भ पुस्तकालय से भी लिंक करते हैं। – Tim

+0

मैं जो दिनचर्या संदर्भ देता हूं वह आईफोन के लिए भी उपलब्ध है। खुशी है कि आपने अपना जवाब वही पाया। – fbrereto

2

सबसे पहले, सुनिश्चित करें कि आप व्यवहार को 10.4 - अधिक आधुनिक सेट करते हैं, मेरे अनुभव में बेहतर काम करता है।

[dateTimeFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 

इसके बाद, आप पार्स और प्रारूप करने के लिए एक ही स्वरूप का उपयोग नहीं कर सकते हैं अगर वे 2 अलग स्ट्रिंग निरूपण है, तो 2 formatters उपयोग करें, या पार्स और फिर स्वरूपण के बीच स्ट्रिंग प्रारूप बदल जाते हैं।

यह भी सुनिश्चित करें कि आप फ़ॉर्मेटिंग विकल्पों पर विचार करें:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1

लोअरकेस ई सप्ताह के दिन, लोअरकेस घ महीने के दिन है है।

महीने के लिए, का उपयोग MMMM, नहीं बी

+0

एचएम, मुझे लगता है कि मैं "सिस्टम" को समझ नहीं पा रहा हूं। मैंने अपनी पहली पोस्ट अपडेट की। मुझे नहीं पता कि यह क्यों काम नहीं करेगा। – Tim

+0

एक टाइपो था - एम 4 द्वारा, मेरा मतलब 4 एमएस था, जैसा एमएमएमएम - व्हाउप्स में था। –

+1

setFormatterBehavior: आईफोन ओएस पर आवश्यक नहीं है, यह * केवल * 10.4+ मोड में संचालित होता है। – benzado

6

यहाँ मेरी कोड से डेटा formatters के साथ काम करने के कुछ उदाहरण हैं। आपको इनमें से किसी भी कार्य को लेने में सक्षम होना चाहिए और इसे अपने प्रारूप के लिए ट्विक करना चाहिए।

उपयोग

NSDate *today = [NSDate date]; 
NSDateFormatter *dateFormatter = [Constants getTitleDateFormatter]; 
NSString *dateString = [dateFormatter stringFromDate:today];   
[dateFormatter release]; 

कार्य

+ (NSDateFormatter *) getDateFormatterWithTimeZone { 
    //Returns the following information in the format of the locale: 
    //YYYY-MM-dd HH:mm:ss z (Z is time zone) 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setLocale:[NSLocale currentLocale]]; 
    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterLongStyle]; 
    return dateFormatter; 

}

+ (NSDateFormatter *)dateFormatterWithoutYear { 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""]; 
    NSRange secondSpace; 
    secondSpace.location = format.length-2; 
    secondSpace.length = 1; 
    format = [format stringByReplacingCharactersInRange:secondSpace withString:@""]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 

+ (NSDateFormatter *) dateFormatterMonthDayOnly { 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""]; 
    NSRange range; 
    range.location = 0; 
    range.length = 3; 
    format = [format substringWithRange:range]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 

+ (NSDateFormatter *) getTitleDateFormatter { 
    //Returns the following information in the format of the locale: 
    //MM-dd-yyyy hh:mm:ssa 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    NSRange secondSpace; 
    secondSpace.location = format.length-2; 
    secondSpace.length = 1; 
    format = [format stringByReplacingOccurrencesOfString:@"/" withString:@"-"]; 
    format = [format stringByReplacingCharactersInRange:secondSpace withString:@""]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 
संबंधित मुद्दे