2009-10-07 17 views
6

में एनएसएनंबर सेकंड में मुझे कुछ ऐसा करने का प्रयास करने में एक भयानक समय है जो आसान होना चाहिए। मेरे पास 32025.8 9 सेकेंड का एनएसएनंबर मान है। मुझे उस समय, मिनट, सेकेंड में प्रतिनिधित्व करने की आवश्यकता है। क्या कोई ऐसी विधि है जो इसे थूकती है? मुझे उचित फॉर्मेटर नहीं मिल रहा है।सेकेंड, मिनट, सेकंड

+0

http://stackoverflow.com/questions/1237778/how-do-i-break-down-an-nstimeinterval-into-year-months-days-hours-minutes-and की डुप्लिकेट। –

उत्तर

8

आपको लगता है कि एक से NSDate और मुद्रण है कि एक NSDateFormatter का उपयोग कर बनाने की कोशिश की है?

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[theNumber doubleValue]]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"HH:mm:ss"]; 
NSLog(@"%@", [formatter stringFromDate:date]); 
[formatter release]; 

आप घंटे, मिनट और सेकंड के लिए व्यक्तिगत मूल्यों की जरूरत है, NSDateComponents का उपयोग के रूप में nall ने सुझाव दिया।

उपर्युक्त NSNumber एक दिन से अधिक का प्रतिनिधित्व करता है तो उपर्युक्त सही मात्रा मुद्रित नहीं करेगा। यह 1 दिन और 1 घंटा हो सकता है, और यह केवल 01:00:00 प्रिंट करेगा। ऐसे मामले में आपको मैन्युअल रूप से घंटे, मिनट और सेकंड की गणना करनी चाहिए।

+0

यह जो कुछ मैं ढूंढ रहा था उसके आधार पर यह और अधिक है। मुझे पता है कि मैं गणित को ओडी कर सकता था लेकिन मैं एक ऐसा तरीका ढूंढने की कोशिश कर रहा था जो अनिवार्य रूप से मेरे लिए किया - एनएसडीएटीफॉर्मेटर मुझे लगता था, मुझे क्या चाहिए था। धन्यवाद। – SonnyBurnette

+0

इस कोड का उपयोग करके मेरे पास एक उपयोगकर्ता था जिसने गलत मान प्राप्त किया - 180 सेकंड के लिए 03:00 के बजाय - उन्हें 33:00 मिल गया। वे एक समय क्षेत्र में थे जो 4.5 घंटे आगे थे और मुझे आश्चर्य हुआ कि क्या उनके टाइमज़ोन में आधे घंटे संभवतः इस कारण हो सकते हैं ... – petenelson

9

यदि आप इसे विभाजित नहीं करना चाहते हैं, तो इसे आजमाएं। यह आपके उद्देश्यों के लिए काफी करीब हो सकता है। नोट: यह उप-दूसरे परिशुद्धता के लिए खाता नहीं है। (setSecondNSInteger लेता है)।

NSDateComponents* c = [[[NSDateComponents alloc] init] autorelease]; 
[c setSecond:32025.89]; 

NSCalendar* cal = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] 
        autorelease]; 

NSDate* d = [cal dateFromComponents:c]; 

NSDateComponents* result = [cal components:NSHourCalendarUnit | 
              NSMinuteCalendarUnit | 
              NSSecondCalendarUnit 
            fromDate:d]; 

NSLog(@"%d hours, %d minutes, %d seconds", 
    [result hour], [result minute], [result second]); 
+0

24 घंटे से अधिक काम नहीं करता है (घंटे 0 पर जाएंगे) – Jonny

+0

जो मुझे उम्मीद थी, यह ठीक काम कर रहा है। महान। मैं आपके उत्तर को उत्तर देता हूं – akk

4

यहाँ math.h से modf() के अलावा कोई भी पुस्तकालयों के बिना एक तरीका है:

float fsec = 32025.89f, frac = 0; 
int milliseconds = (int)(modf(fsec, &frac) * 1000); 
int isec = (int)frac; 
int hours = isec/3600; 
int minutes = (isec % 3600)/60; 
int seconds = isec % 60; 
+0

मैंने देखा है कि आप घंटे लेने के लिए 3600 से 0 विभाजित करते हैं। यह एक टाइपो है, है ना? आप "fsec/3600" सही कहने का मतलब है? – SonnyBurnette

+0

और 'frexp' को इसके साथ क्या करना है ?? –

+0

उम ... यह अंश भाग और फ़्लोटिंग पॉइंटर संख्या का पूर्णांक भाग निकालता है। इस मामले में, मिलीसेकंड और सेकंड। –

2

NSNumber * valueForDisplay = [NSNumber numberWithDouble: [आत्म valueForDisplay: clockName]];

NSNumber *totalDays = [NSNumber numberWithDouble: 
     ([valueForDisplay doubleValue]/86400)]; 
NSNumber *totalHours = [NSNumber numberWithDouble: 
     (([valueForDisplay doubleValue]/3600) - 
      ([totalDays intValue] * 24))]; 
NSNumber *totalMinutes = [NSNumber numberWithDouble: 
     (([valueForDisplay doubleValue]/60) - 
     ([totalDays intValue] * 24 * 60) - 
     ([totalHours intValue] * 60))]; 
NSNumber *totalSeconds = [NSNumber numberWithInt: 
     ([valueForDisplay intValue] % 60)]; 
संबंधित मुद्दे