जवाबों:
[[NSDate date] timeIntervalSince1970];
यह एक डबल के रूप में युग के बाद से सेकंड की संख्या देता है। मुझे लगभग यकीन है कि आप अंश भाग से मिलीसेकंड तक पहुंच सकते हैं।
[NSDate timeIntervalSinceReferenceDate]
सस्ता है। (हालांकि यह एक अलग "युग" का संदर्भ देता है - यदि आप 1970 को निरंतर जोड़ना चाहते हैं NSTimeIntervalSince1970
।)
यदि आप इसे सापेक्ष समय के लिए उपयोग कर रहे हैं (उदाहरण के लिए खेल या एनीमेशन के लिए) तो मैं CACurrentMediaTime () का उपयोग करूँगा
double CurrentTime = CACurrentMediaTime();
यह अनुशंसित तरीका है; NSDate
नेटवर्क वाली सिंक-क्लॉक से ड्रॉ होता है और कभी-कभी हिचकी आएगी जब इसे नेटवर्क के खिलाफ फिर से सिंक किया जाएगा।
यह वर्तमान निरपेक्ष समय, सेकंड में वापस करता है।
यदि आप केवल दशमलव भाग चाहते हैं (अक्सर एनिमेशन को सिंक्रनाइज़ करते समय उपयोग किया जाता है),
let ct = CACurrentMediaTime().truncatingRemainder(dividingBy: 1)
मैंने iPhone 4S और iPad 3 (रिलीज़ बिल्ड) पर अन्य सभी जवाब दिए। CACurrentMediaTime
एक छोटे अंतर से कम से कम ओवरहेड है। timeIntervalSince1970
दूसरों की तुलना में बहुत धीमा है, शायद NSDate
तात्कालिक ओवरहेड के कारण , हालांकि यह कई उपयोग के मामलों के लिए मायने नहीं रखता है।
CACurrentMediaTime
यदि आप कम से कम ओवरहेड चाहते हैं तो मैं सलाह दूंगा और क्वार्ट्ज फ्रेमवर्क निर्भरता को जोड़ने में कोई आपत्ति नहीं। या gettimeofday
यदि पोर्टेबिलिटी आपके लिए प्राथमिकता है।
आईफ़ोन 4 स
CACurrentMediaTime: 1.33 µs/call
gettimeofday: 1.38 µs/call
[NSDate timeIntervalSinceReferenceDate]: 1.45 µs/call
CFAbsoluteTimeGetCurrent: 1.48 µs/call
[[NSDate date] timeIntervalSince1970]: 4.93 µs/call
आईपैड 3
CACurrentMediaTime: 1.25 µs/call
gettimeofday: 1.33 µs/call
CFAbsoluteTimeGetCurrent: 1.34 µs/call
[NSDate timeIntervalSinceReferenceDate]: 1.37 µs/call
[[NSDate date] timeIntervalSince1970]: 3.47 µs/call
NSTimeIntervalSince1970
मैक्रो जो सबसे तेज है।
NSTimeIntervalSince1970
और "संदर्भ तिथि" (यानी 2001-01-01) के बीच के सेकंड का वर्णन करने वाला एक निरंतर है, इसलिए यह हमेशा 978307200 के बराबर है
स्विफ्ट में हम एक फंक्शन कर सकते हैं और निम्नानुसार कर सकते हैं
func getCurrentMillis()->Int64{
return Int64(NSDate().timeIntervalSince1970 * 1000)
}
var currentTime = getCurrentMillis()
अपने में काम हालांकि ठीक स्विफ्ट 3.0 लेकिन हम को संशोधित करने और उपयोग कर सकते हैं Date
के बजाय वर्ग NSDate
में 3.0
स्विफ्ट 3.0
func getCurrentMillis()->Int64 {
return Int64(Date().timeIntervalSince1970 * 1000)
}
var currentTime = getCurrentMillis()
अब तक मुझे gettimeofday
iOS (iPad) पर एक अच्छा समाधान मिला , जब आप कुछ अंतराल मूल्यांकन करना चाहते हैं (कहते हैं, फ्रैमरेट, एक रेंडरिंग फ्रेम का समय ...):
#include <sys/time.h>
struct timeval time;
gettimeofday(&time, NULL);
long millis = (time.tv_sec * 1000) + (time.tv_usec / 1000);
वर्तमान तिथि के लिए मिलीसेकंड प्राप्त करने के लिए।
स्विफ्ट 4+:
func currentTimeInMilliSeconds()-> Int
{
let currentDate = Date()
let since1970 = currentDate.timeIntervalSince1970
return Int(since1970 * 1000)
}
स्विफ्ट 2
let seconds = NSDate().timeIntervalSince1970
let milliseconds = seconds * 1000.0
स्विफ्ट 3
let currentTimeInMiliseconds = Date().timeIntervalSince1970.milliseconds
TimeInterval
उर्फ के Double
पास मिलीसेकंड की संपत्ति नहीं है। Date().timeIntervalSince1970 * 1000
CodeTimestamps के बारे में जानना उपयोगी हो सकता है, जो मच-आधारित टाइमिंग फ़ंक्शन के आसपास एक आवरण प्रदान करता है। यह आपको नैनोसेकंड-रिज़ॉल्यूशन टाइमिंग डेटा देता है - मिलीसेकंड की तुलना में 1000000x अधिक सटीक। हां, एक लाख गुना ज्यादा सटीक। (उपसर्ग मिलि, माइक्रो, नैनो हैं, प्रत्येक 1000x पिछले की तुलना में अधिक सटीक।) भले ही आपको CodeTimestamps की आवश्यकता न हो, कोड की जाँच करें (यह खुला स्रोत है) यह देखने के लिए कि वे समय डेटा प्राप्त करने के लिए कैसे उपयोग करते हैं। यह तब उपयोगी होगा जब आपको अधिक सटीकता की आवश्यकता हो और NSDate दृष्टिकोण की तुलना में तेज़ विधि कॉल करना चाहिए।
http://eng.pulse.me/line-by-line-speed-analysis-for-ios-apps/
-fno-objc-arc
अगर आप ARC :)
// Timestamp after converting to milliseconds.
NSString * timeInMS = [NSString stringWithFormat:@"%lld", [@(floor([date timeIntervalSince1970] * 1000)) longLongValue]];
मुझे एक NSNumber
वस्तु की आवश्यकता थी जिसके सटीक परिणाम हो [[NSDate date] timeIntervalSince1970]
। चूंकि इस फ़ंक्शन को कई बार बुलाया गया था और मुझे वास्तव में एक NSDate
ऑब्जेक्ट बनाने की आवश्यकता नहीं थी, प्रदर्शन बहुत अच्छा नहीं था।
इसलिए यह प्रारूप प्राप्त करने के लिए कि मूल फ़ंक्शन मुझे दे रहा था, यह प्रयास करें:
#include <sys/time.h>
struct timeval tv;
gettimeofday(&tv,NULL);
double perciseTimeStamp = tv.tv_sec + tv.tv_usec * 0.000001;
जो आपको जैसा चाहिए वैसा ही परिणाम दें [[NSDate date] timeIntervalSince1970]
निरपेक्ष समय 1 जनवरी 2001 00:00:00 GMT की पूर्ण संदर्भ तिथि के सापेक्ष सेकंड में मापा जाता है। एक सकारात्मक मूल्य संदर्भ तिथि के बाद की तारीख का प्रतिनिधित्व करता है, एक नकारात्मक मूल्य इससे पहले की तारीख का प्रतिनिधित्व करता है। उदाहरण के लिए, पूर्ण समय -32940326 16 दिसंबर, 1999 को 17:54:34 के बराबर है। इस फ़ंक्शन के लिए बार-बार कॉल करने से नीरस रूप से बढ़ते परिणामों की गारंटी नहीं मिलती है। बाह्य समय संदर्भों के साथ सिंक्रनाइज़ेशन या घड़ी के स्पष्ट उपयोगकर्ता परिवर्तन के कारण सिस्टम समय घट सकता है।
इसे इस्तेमाल करे :
NSDate * timestamp = [NSDate dateWithTimeIntervalSince1970:[[NSDate date] timeIntervalSince1970]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss.SSS"];
NSString *newDateString = [dateFormatter stringFromDate:timestamp];
timestamp = (NSDate*)newDateString;
इस उदाहरण में, dateWithTimeIntervalSince1970 का उपयोग फॉर्मैटर @ "YYYY-MM-dd HH: mm: ss.SSS" के संयोजन में किया जाता है, जो वर्ष, महीने, दिन और समय के साथ दिनांक को घंटे, मिनट, सेकंड और मिलीसेकंड पर लौटाएगा। । उदाहरण देखें: "2015-12-02 04: 43: 15.008"। मैंने NSString का उपयोग यह सुनिश्चित करने के लिए किया कि प्रारूप पहले लिखा जाएगा।
यह मूल रूप से @TristanLorach द्वारा पोस्ट किया गया एक ही उत्तर है, बस स्विफ्ट 3 के लिए पुन: विस्फोट किया गया है:
/// Method to get Unix-style time (Java variant), i.e., time since 1970 in milliseconds. This
/// copied from here: http://stackoverflow.com/a/24655601/253938 and here:
/// http://stackoverflow.com/a/7885923/253938
/// (This should give good performance according to this:
/// http://stackoverflow.com/a/12020300/253938 )
///
/// Note that it is possible that multiple calls to this method and computing the difference may
/// occasionally give problematic results, like an apparently negative interval or a major jump
/// forward in time. This is because system time occasionally gets updated due to synchronization
/// with a time source on the network (maybe "leap second"), or user setting the clock.
public static func currentTimeMillis() -> Int64 {
var darwinTime : timeval = timeval(tv_sec: 0, tv_usec: 0)
gettimeofday(&darwinTime, nil)
return (Int64(darwinTime.tv_sec) * 1000) + Int64(darwinTime.tv_usec / 1000)
}
func currentmicrotimeTimeMillis() -> Int64{
let nowDoublevaluseis = NSDate().timeIntervalSince1970
return Int64(nowDoublevaluseis*1000)
}
यही मैंने स्विफ्ट के लिए इस्तेमाल किया
var date = NSDate()
let currentTime = Int64(date.timeIntervalSince1970 * 1000)
print("Time in milliseconds is \(currentTime)")
सटीकता को सत्यापित करने के लिए इस साइट का इस्तेमाल किया http://currentmillis.com/
let timeInMiliSecDate = Date()
let timeInMiliSec = Int (timeInMiliSecDate.timeIntervalSince1970 * 1000)
print(timeInMiliSec)
NSTimeInterval time = ([[NSDate date] timeIntervalSince1970]); //double
long digits = (long)time; //first 10 digits
int decimalDigits = (int)(fmod(time, 1) * 1000); //3 missing digits
/*** long ***/
long timestamp = (digits * 1000) + decimalDigits;
/*** string ***/
NSString *timestampString = [NSString stringWithFormat:@"%ld%03d",digits ,decimalDigits];