स्विफ्ट में यूनिक्स एपोच समय प्राप्त करें


102

आप स्विफ्ट में युग से सेकंड कैसे प्राप्त करते हैं?


2
उद्देश्य-सी में समान - एनएसडी का उपयोग करें।
gnasher729

2
मैंने Apple उत्पादों को विकसित करने से परहेज किया है क्योंकि मुझे ऑब्जेक्टिव-सी से नफरत है। नतीजतन, मैंने इसे नहीं सीखा है। और मुझे पता है कि स्विफ्ट सिंटैक्स कम से कम थोड़ा अलग है। बस मुझे सिंटेक्स दिखाओ। अपने आप को कुछ आसान SO प्रतिष्ठा प्राप्त करें।
क्रिस रेडफोर्ड


3
नहीं, यह स्विफ्ट विधि की प्रविष्टि के लिए सीधे लिंक करता है - timeIntervalSince1970:।
zaph

3
वास्तव में मैं विशिष्ट विधि से जुड़ा हुआ हूं :)
मार्टिन आर

जवाबों:


162

आप बस NSDate के timeIntervalSince1970फ़ंक्शन का उपयोग कर सकते हैं ।

let timeInterval = NSDate().timeIntervalSince1970

7
ध्यान दें कि इसके लिए फाउंडेशन का आयात करना होगा।
20

3
फाउंडेशन का उपयोग किए बिना कैसे?
मारीस

3
आप नींव का उपयोग नहीं करना चाहते हैं तो आपको AFNetworking / AlamoFire (इस्तेमाल कर सकते हैं github.com/Alamofire/Alamofire लोड करने के लिए) currentmillis.com और फिर पृष्ठ के HTML पार्स। ध्यान दें कि आपको नेटवर्किंग देरी और कनेक्टिविटी के लिए जांच करनी होगी। मैंने फाउंडेशन का उपयोग करने का निर्णय लिया ...
रॉबर्ट्स

2
इंट के रूप में कैसे?
रैस्टहाउस हाउस

82

स्विफ्ट 3.0 के लिए

Date().timeIntervalSince1970

2
अच्छा था। इसके अलावा, लोग stackoverflow.com/questions/39811352/swift-3-date-vs-nsdate
मैट जॉनसन-पिंट

49
UNIX समय प्रारूप मिलीसेकंड के साथ है। तो इंट (तारीख () timeIntervalSince1970 * 1000।)
चिप-प्यार-एनवाई

9
@ CHiP-love-NY: यह सच नहीं है। यूनिक्स समय 1 जनवरी 1970, यूटीसी के बाद से सेकंड की संख्या है ।
मार्टिन आर

1
यह एक रिटर्न TimeInterval , जो secods में है
डैनियल

1

आप निम्नलिखित का उपयोग करके प्राप्त कर सकते हैं

Int(Date().timeIntervalSince1970)

यह वर्तमान तिथि के लिए है, यदि आप दी गई तिथि के लिए प्राप्त करना चाहते हैं

Int(myDate.timeIntervalSince1970)

यदि आप वापस UNIX समय युग से स्विफ्ट दिनांक समय में कनवर्ट करना चाहते हैं, तो आप निम्न का उपयोग कर सकते हैं

let date = Date(timeIntervalSince1970: unixtEpochTime)

0
1 second      = -
1 millisecond = 1,000 seconds
1 microsecond = 1,000,000 seconds

स्विफ्ट के timeIntervalSince1970रिटर्न सेकंड के साथ "सब-मिलिसेकंड" परिशुद्धता के रूप में प्रलेखित है, जिसे मैंने आमतौर पर माइक्रोसेकंड का मतलब माना है, लेकिन कभी-कभी एक स्केल (दशमलव के दाईं ओर एक अंक) कम या अधिक। जब यह 5 के पैमाने (दशमलव के बाद 5 अंक) देता है, तो मुझे नहीं पता कि स्विफ्ट 0 को पीछे छोड़ रही है या यह सटीक के 6 पैमाने उत्पन्न नहीं कर सकती है। लेकिन जब यह 7 के पैमाने पर लौटता है, तो अतिरिक्त अंक को छोटा किया जा सकता है क्योंकि यह माइक्रोसेकंड परिशुद्धता से परे है। इसलिए, सुसंगत और सटीक-सच्चे मूल्यों के लिए:

let preciseSeconds = Int(Date().timeIntervalSince1970)
let preciseMilliseconds = Int(Date().timeIntervalSince1970 * 1_000)
let preciseMicroseconds = Int(Date().timeIntervalSince1970 * 1_000_000) // most likely precise

दुर्भाग्य से, हालांकि, 2038 में, 32-बिट संख्या यूनिक्स टाइमस्टैम्प के लिए उपयोग करने योग्य नहीं होगी और उन्हें 64-बिट होना चाहिए।

let seconds = Date().timeIntervalSince1970
let milliseconds = Date().timeIntervalSince1970 * 1_000
let microseconds = Date().timeIntervalSince1970 * 1_000_000

एक विस्तार:

extension Date {
    var unixTimestamp: Int64 {
        return Int64(self.timeIntervalSince1970 * 1_000)
    }
}

Date().unixTimestamp

0

यदि आप फ़ाउंडेशन अर्थात लिनक्स उपयोग आदि के लिए आयात नहीं करना चाहते हैं, तो आप CoreFoundation से निम्नलिखित का उपयोग कर सकते हैं:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970

क्या आप जानते हैं कि कब तारीखें और दोस्त क्रॉस-प्लेटफॉर्म बन जाएंगे?
ज़ोल्टन मटुक

@ ZoltánMatók मैंने सुना है कि उनके पास खुले में अधिक फाउंडेशन को फिर से लागू करने की योजना है। अधिक जानकारी के लिए forum.swift.org पर एक नज़र डालें।
rshev
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.