2011-04-21 12 views
7

के लिए सेटिंग दिनांक प्रारूप "मैं 2011-04-21 03: 31: 37.310396" जैसे दिनांक प्रारूप को सेट करने का प्रयास कर रहा हूं। मुझे लगता है कि मुझे आंशिक सेकंड सही नहीं मिल रहा है। मैं इसे निर्दिष्ट करने के दिशा-निर्देशों के लिए http://unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns पर देख रहा हूं और मुझे लगता है कि मेरी समस्या प्रारूप में ही है।NSDateFormatter

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ssSSSSSS";  
NSDate* serverDate = [dateFormatter dateFromString:stringFormOfDate];  

सहायता?

+0

क्या आपकी पोस्ट में सेकेंड और माइक्रोसेकंड के बीच गायब बिंदु है? –

+1

आप कैसे जानते हैं कि यह सही नहीं है? मिलीसेकंद मूल्य के साथ तुलना करने की कोशिश करें। – Sulthan

उत्तर

22

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSSSSS";  
NSDate* serverDate = [dateFormatter dateFromString:@"2011-04-21 03:31:37.310396"]; 

NSLog(@"%@", serverDate); 

कोशिश मुझे लगता है कि आप शायद डॉट भूल

+6

हालांकि यह काम करने लगता है कि 'NSDateFormatter' आउटपुट मिली-सेकंड तक सीमित है। पिछले 3 में से कोई भी "एस" प्रारूप वर्ण "0" उत्पन्न करेगा। एक तारीख बनाने के लिए भी लागू होता है। उदाहरण के लिए समय अंतराल उत्पन्न करता है: "325063897.310000"। इसलिए यह वास्तव में सवाल का जवाब नहीं दे सकता क्योंकि 3 9 6 माइक्रो-सेकेंड गुम हो गए हैं। (ओएसएक्स पर परीक्षण, आईफोन नहीं) – zaph

+0

पूरी तरह से सही, अच्छा बिंदु, बस एक प्रतिलिपि और पेस्ट मुद्दा :) – suprandr

5

अन्य जवाब में Zaph की टिप्पणी के अनुसार: एस की अधिकतम संख्या 3. किसी भी अधिक सिर्फ शून्य उत्पादन है।

उदा।

dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSSSSS"; // Last 3 'S' ignored. 

Then @"2011-04-21 03:31:37.311396" will produce 2011-04-21 03:31:37.311000 

पूर्ण माइक्रोसेकंड परिशुद्धता बनाए रखने के लिए इस जादू का प्रयास करें:

-(NSDate *)_dateFromUtcString:(NSString *)utcString{ 
    if(!utcString){ 
     return nil; 
    } 
    static NSDateFormatter *df = nil; 
    if (df == nil) { 
     df = [[NSDateFormatter alloc] init]; 
     [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
     [df setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
    } 

    NSArray* parts = [utcString componentsSeparatedByString:@"."]; 
    NSDate *utcDate = [df dateFromString:parts[0]]; 
    if(parts.count > 1){ 
     double microseconds = [parts[1] doubleValue]; 
     utcDate = [utcDate dateByAddingTimeInterval:microseconds/1000000]; 
    } 
    return utcDate; 
} 

अब एक NSString "2011-04-21 03: 31: ३७.३१०३९६" एक NSDate 2011-04-21 03 के लिए पूरी तरह से पार्स जाएगा : 31: 37.310396

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