दिलचस्प पोस्ट
GoogleWebAuthorizationBroker.AuthorizeAsync लटकता है बफर डबल कैसे करें एक फॉर्म पर नेट नियंत्रण? Android में SQLite डेटाबेस बनाएँ एंड्रॉइड में माइम प्रकार की फ़ाइल का निर्धारण कैसे करें? JQuery के साथ तत्व आईडी में कोलन को हैंडलिंग उद्देश्य-सी / कोको टच में एचटीएमएल वर्ण डिकोडिंग पायथन वैरिएबल के प्रकार की जांच करने के लिए सर्वश्रेष्ठ (मुहावरेदार) तरीका क्या है? क्या आप रूबी में मैप (और: विधि) सिंटैक्स में तर्क प्रदान कर सकते हैं? क्रमबद्ध पेजिंग के लिए दिए गए रिकार्ड के लिए छोड़ मूल्य की गणना करें एक डेटा.फ्रेम बनाएं जहां स्तंभ एक सूची है जीआईटी एमवी और केवल डायरेक्टरी के मामले बदलते हैं PHP में "= &" और "& =" ऑपरेटर क्या करते हैं? क्या एक पोस्टग्रे एसक्यूएल क्वेरी में नामित निरंतरता को परिभाषित करने का एक तरीका है? डेटा को क्षैतिज रूप से सॉर्ट करने के लिए bash का उपयोग करना पांडा डेटाफ़्रेम में सूचियों की सूची प्राप्त करना

मैं एक सटीक समय कैसे प्राप्त कर सकता हूं, उदाहरण के लिए उद्देश्य सी में मिलीसेकंड में?

क्या समय मिलाने का एक आसान तरीका बहुत ठीक है?

मुझे विधि कॉल के बीच कुछ विलंब की गणना करने की आवश्यकता है अधिक विशेष रूप से, मैं एक UIScrollView में स्क्रॉलिंग की गति की गणना करना चाहता हूं।

वेब के समाधान से एकत्रित समाधान "मैं एक सटीक समय कैसे प्राप्त कर सकता हूं, उदाहरण के लिए उद्देश्य सी में मिलीसेकंड में?"

NSDate और समय timeIntervalSince* तरीके एक NSTimeInterval वापसी करेंगे जो कि उप मिलिसेकंड सटीकता के साथ एक डबल है। NSTimeInterval सेकंड में है, लेकिन यह आपको अधिक सटीक देने के लिए डबल का उपयोग करता है।

मिलीसेकंड समय सटीकता की गणना के लिए, आप यह कर सकते हैं:

 // Get a current time for where you want to start measuring from NSDate *date = [NSDate date]; // do work... // Find elapsed time and convert to milliseconds // Use (-) modifier to conversion since receiver is earlier than now double timePassed_ms = [date timeIntervalSinceNow] * -1000.0; 

समय पर दस्तावेज़ीकरण अब

NSDate का उपयोग करके इस अंतराल की गणना करने के कई अन्य तरीके हैं, और मैं NSDate लिए क्लास दस्तावेज देख रहा हूं जो एनएसडीटे वर्ग संदर्भ में पाया जाता है।

सटीक माप प्राप्त करने के लिए mach_absolute_time() का उपयोग किया जा सकता है

http://developer.apple.com/qa/qa2004/qa1398.html देखें

यह भी उपलब्ध है CACurrentMediaTime() , जो अनिवार्य रूप से एक ही बात है लेकिन एक आसान उपयोग इंटरफ़ेस के साथ।

कृपया समय बीतने के लिए CFAbsoluteTimeGetCurrent , CFAbsoluteTimeGetCurrent , या CFAbsoluteTimeGetCurrent उपयोग न करें। ये सभी सिस्टम घड़ी पर निर्भर हैं, जो किसी भी समय कई अलग-अलग कारणों के कारण बदल सकते हैं, जैसे कि नेटवर्क टाइम सिंक (एनटीपी) घड़ी को अद्यतन करता है (अक्सर बहाव के लिए समायोजित होता है), डीएसटी समायोजन, छलांग सेकंड, और इसी तरह।

इसका मतलब यह है कि यदि आप अपने डाउनलोड या अपलोड की गति को मापते हैं, तो आपको अपने नंबरों पर अचानक स्पाइक या बूँदें मिलेंगी जो वास्तव में क्या हुआ है, इसके साथ सहसंबंध नहीं हैं; आपके प्रदर्शन परीक्षणों में अजीब गलत आउटलाइन होंगे; और गलत समय के बाद आपका मैन्युअल टाइमर ट्रिगर करेगा। समय भी पीछे की ओर जा सकता है, और आप नकारात्मक डेल्टा के साथ समाप्त होते हैं, और आप अनंत पुनर्क्रयन या मृत कोड (हाँ, मैंने इनमें से दोनों किया है) के साथ समाप्त कर सकते हैं

mach_absolute_time उपयोग करें कर्नेल बूट होने के बाद से यह वास्तविक सेकंड का उपाय करता है। यह मोनोटोनिक रूप से बढ़ रहा है (पीछे की ओर कभी नहीं जाएगा), और तिथि और समय सेटिंग्स से अप्रभावित है। चूंकि यह काम करने के लिए एक दर्द है, यहां एक सरल आवरण है जो आपको NSTimeInterval देता है:

 // LBClock.h @interface LBClock : NSObject + (instancetype)sharedClock; // since device boot or something. Monotonically increasing, unaffected by date and time settings - (NSTimeInterval)absoluteTime; - (NSTimeInterval)machAbsoluteToTimeInterval:(uint64_t)machAbsolute; @end // LBClock.m #include <mach/mach.h> #include <mach/mach_time.h> @implementation LBClock { mach_timebase_info_data_t _clock_timebase; } + (instancetype)sharedClock { static LBClock *g; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ g = [LBClock new]; }); return g; } - (id)init { if(!(self = [super init])) return nil; mach_timebase_info(&_clock_timebase); return self; } - (NSTimeInterval)machAbsoluteToTimeInterval:(uint64_t)machAbsolute { uint64_t nanos = (machAbsolute * _clock_timebase.numer) / _clock_timebase.denom; return nanos/1.0e9; } - (NSTimeInterval)absoluteTime { uint64_t machtime = mach_absolute_time(); return [self machAbsoluteToTimeInterval:machtime]; } @end 

CFAbsoluteTimeGetCurrent() पूर्ण समय को double मूल्य के रूप में देता है, लेकिन मुझे नहीं पता कि इसकी सटीक क्या है – यह केवल हर दर्जन मिलीसेकेंड को अपडेट कर सकता है, या यह हर माइक्रोसेकेंड को अपडेट कर सकता है, मुझे नहीं पता है।

मैं mach_absolute_time() प्रयोग नहीं mach_absolute_time() क्योंकि यह कर्नेल और प्रोसेसर के एक पूर्ण समय के लिए टिक्स (शायद एक अपटाइम) का उपयोग करने के लिए एक संयोजन को क्वेरी करता है।

मैं क्या उपयोग करेंगे:

 CFAbsoluteTimeGetCurrent(); 

आईओएस और ओएसएक्स सॉफ्टवेयर और हार्डवेयर में अंतर को दूर करने के लिए यह फ़ंक्शन ऑप्टिमाइज़ किया गया है।

कुछ गीकीयर

mach_absolute_time() और AFAbsoluteTimeGetCurrent() में अंतर के mach_absolute_time() हमेशा 24000011.154871 के आसपास होते हैं

यहां मेरे ऐप का लॉग है:

कृपया ध्यान दें कि अंतिम परिणाम समय CFAbsoluteTimeGetCurrent() में अंतर है

  2012-03-19 21:46:35.609 Rest Counter[3776:707] First Time: 353900795.609040 2012-03-19 21:46:36.360 Rest Counter[3776:707] Second Time: 353900796.360177 2012-03-19 21:46:36.361 Rest Counter[3776:707] Final Result Time (difference): 0.751137 2012-03-19 21:46:36.363 Rest Counter[3776:707] Mach absolute time: 18027372 2012-03-19 21:46:36.365 Rest Counter[3776:707] Mach absolute time/final time: 24000113.153295 2012-03-19 21:46:36.367 Rest Counter[3776:707] ----------------------------------------------------- 2012-03-19 21:46:43.074 Rest Counter[3776:707] First Time: 353900803.074637 2012-03-19 21:46:43.170 Rest Counter[3776:707] Second Time: 353900803.170256 2012-03-19 21:46:43.172 Rest Counter[3776:707] Final Result Time (difference): 0.095619 2012-03-19 21:46:43.173 Rest Counter[3776:707] Mach absolute time: 2294833 2012-03-19 21:46:43.175 Rest Counter[3776:707] Mach absolute time/final time: 23999753.727777 2012-03-19 21:46:43.177 Rest Counter[3776:707] ----------------------------------------------------- 2012-03-19 21:46:46.499 Rest Counter[3776:707] First Time: 353900806.499199 2012-03-19 21:46:55.017 Rest Counter[3776:707] Second Time: 353900815.016985 2012-03-19 21:46:55.018 Rest Counter[3776:707] Final Result Time (difference): 8.517786 2012-03-19 21:46:55.020 Rest Counter[3776:707] Mach absolute time: 204426836 2012-03-19 21:46:55.022 Rest Counter[3776:707] Mach absolute time/final time: 23999996.639500 2012-03-19 21:46:55.024 Rest Counter[3776:707] ----------------------------------------------------- 
 #define CTTimeStart() NSDate * __date = [NSDate date] #define CTTimeEnd(MSG) NSLog(MSG " %g",[__date timeIntervalSinceNow]*-1) 

उपयोग:

 CTTimeStart(); ... CTTimeEnd(@"that was a long time:"); 

आउटपुट:

 2013-08-23 15:34:39.558 App-Dev[21229:907] that was a long time: .0023 

इसके अलावा, यहां एक 64-बिट NSNumber गणना कैसे की जाती है, जो कि यूनिक्स युग के साथ मिलीसेकंड में आरंभ की जाती है, NSNumber आप इसे कोरडाटा में संग्रहीत करना चाहते हैं। मुझे अपने ऐप के लिए इसकी ज़रूरत है जो एक ऐसी व्यवस्था से संपर्क करता है जो इस तरह की तिथियों को स्टोर करता है।

  + (NSNumber*) longUnixEpoch { return [NSNumber numberWithLongLong:[[NSDate date] timeIntervalSince1970] * 1000]; } 

मुझे पता है यह एक पुराना है, लेकिन यहां तक ​​कि मैं खुद को फिर से भटक रहा हूं, इसलिए मैंने सोचा कि मैं यहां अपना खुद का विकल्प प्रस्तुत करूंगा।

सर्वोत्तम शर्त यह है कि मेरी ब्लॉग पोस्ट को इस पर देखें: उद्देश्य-सी में समय-सारिणी: स्टॉपवॉच

मूल रूप से, मैंने एक ऐसा वर्ग लिखा था जो बहुत ही बुनियादी तरीके से देखना बंद कर देता है, लेकिन इसे समझाया जाता है ताकि आपको केवल निम्न कार्य करने की आवश्यकता हो:

 [MMStopwatchARC start:@"My Timer"]; // your work here ... [MMStopwatchARC stop:@"My Timer"]; 

और आप इसके साथ समाप्त होते हैं:

 MyApp[4090:15203] -> Stopwatch: [My Timer] runtime: [0.029] 

लॉग में …

फिर, मेरी पोस्ट थोड़ी अधिक के लिए देखें या यहां इसे डाउनलोड करें: MMStopwatch.zip

उन लोगों के लिए हमें @ जेफ थॉम्पसन के उत्तर के स्विफ्ट संस्करण की आवश्यकता है:

 // Get a current time for where you want to start measuring from var date = NSDate() // do work... // Find elapsed time and convert to milliseconds // Use (-) modifier to conversion since receiver is earlier than now var timePassed_ms: Double = date.timeIntervalSinceNow * -1000.0 

उम्मीद है इससे आपको मदद होगी।

1 जनवरी, 1 9 70 से एनएसडीट का उपयोग करके आप वर्तमान समय मिलीसेकंड में प्राप्त कर सकते हैं:

 - (double)currentTimeInMilliseconds { NSDate *date = [NSDate date]; return [date timeIntervalSince1970]*1000; }