2010-03-05 11 views
9

मैं निम्नलिखित कोड है कि घंटे, मिनट और सेकंड में मिलीसेकेंड में परिवर्तित करने के लिए है है:उद्देश्य सी Convert पूर्णांक

int hours = floor(rawtime/3600000); 

int mins = floor((rawtime % 3600000)/(1000 * 60)); 
int secs = floor(((rawtime % 3600000) % (1000 * 60))/1000); 

NSLog(@"%d:%d:%d", hours, mins, secs); 

NSString *hoursStr = [NSString stringWithFormat:@"%d", hours]; 
NSString *minsStr = [NSString stringWithFormat:@"%d", mins]; 
NSString *secsStr = [NSString stringWithFormat:@"%d", secs]; 

NSLog(@"%a:%a:%a", hoursStr, minsStr, secsStr); 

काफी सरल। Rawtime मूल्य 1200 उत्पादन के साथ एक पूर्णांक इस तरह है:

0:0:1 

0x1.3eaf003d9573p-962:0x1.7bd2003d3ebp-981:-0x1.26197p-698 

ऐसा क्यों है कि तार को ints परिवर्तित इस तरह के जंगली संख्या देता है? मैंने% i और% u का उपयोग करने का प्रयास किया है और उन्होंने कोई फर्क नहीं पड़ता। क्या हो रहा है?

+0

डुप्लिकेट (?) [आईफोन में int से स्ट्रिंग में कैसे परिवर्तित करें] (http://stackoverflow.com/questions/1372715/how-to-convert-from-int-to-string-in-iphone) –

उत्तर

17

आपको एनएसएसटींग के लिए रूपांतरण विनिर्देशक के रूप में %@ का उपयोग करना होगा। अपनी अंतिम पंक्ति को बदलें:

NSLog(@"%@:%@:%@", hoursStr, minsStr, secsStr); 

%a का अर्थ कुछ अलग है। से printf()man page:

ए.ए.
डबल तर्क गोल और शैली

[-]0xh.hhhp[+-]d 

जहां हेक्साडेसिमल सूत्री चरित्र के बाद अंकों की संख्या के बराबर है में हेक्साडेसिमल नोटेशन में बदल जाती है परिशुद्धता विनिर्देश।

+0

आह मुझे पता था कि यह कुछ आसान होगा जो मुझे याद आया। धन्यवाद। – Gilbert

6
इसके बजाय अपनी खुद की स्ट्रिंग स्वरूपण कोड रोलिंग की

, आप संख्या के लिए एक NSNumberFormatter या दिनांक/समय के लिए एक NSDateFormatter का उपयोग करना चाहिए। ये डेटा स्वरूपक उपयोगकर्ता के लोकेल में प्रारूप के स्थानीयकरण की देखभाल करते हैं और अंतर्निहित विभिन्न प्रारूपों को संभालते हैं।

अपने उपयोग के लिए, आप एक NSTimeInterval में अपने मिलीसेकंड समय बदलने की आवश्यकता (typedef 'एक डबल से d):

NSTimeInterval time = rawtime/1e3; 

अब आप एक NSDateFormatter उपयोग कर सकते हैं समय पेश करने के लिए:

NSDate *timeDate = [NSDate dateWithTimeIntervalSinceReferenceDate:time]; 
NSString *formattedTime = [NSDateFormatter localizedStringFromDate:timeDate 
                 dateStyle:NSDateFormatterNoStyle 
                 timeStyle:NSDateFormatterMediumStyle]; 
NSString *rawTime = [[formattedTime componentsSeparatedByString:@" "] objectAtIndex:0]; 
ओएस एक्स पर

जहां अंतिम पंक्ति "एएम/पीएम" को हटा देती है। यह किसी भी समय 12 घंटे से कम समय तक काम करेगा और एचएच के लिए स्थानीय प्रारूप में स्वरूपित स्ट्रिंग देगा: एमएम: एसएस। आईफोन पर, localizedStringFromDate:dateStyle:timeStyle: उपलब्ध नहीं है (अभी तक)। आप दिनांक प्रारूप उदाहरण पर setTimeStyle:, setDateStyle: और stringFromDate: के साथ समान प्रभाव प्राप्त कर सकते हैं।

+0

स्थानीयकृत StringFromDate आईफोन पर उपलब्ध है? शायद इसके बजाय setLocale का उपयोग करना होगा? – DyingCactus

+0

@DyingCactus आप बिल्कुल सही हैं; 'localizedStringFromDate: dateStyle: timeStyle' आईफोन (अभी तक) पर उपलब्ध नहीं है। आप 'setDateStyle:' और 'setTimeStyle' का उपयोग करके समान कार्यक्षमता प्राप्त कर सकते हैं' stringFromDate: ' –