2012-11-11 25 views
7

मैं एक उद्देश्य-सी शुरुआत करने वाला हूं और मुझे अपने क्लाइंट के लिए एक आईफोन ऐप बनाने के लिए नियुक्त किया गया था। मेरे पास जावा के साथ कुछ पृष्ठभूमि है लेकिन इस उद्देश्य-सी में लगभग कोई अनुभव नहीं है और यह मेरा पूरा समय है जो एक पूर्ण अनुप्रयोग विकसित करने के लिए है ...यूनिक्स टाइमस्टैम्प के रूप में PHP दिनांक() को पास करने के लिए NSDate को पूर्णांक में कैसे परिवर्तित करें?

वैसे भी, मैं वर्तमान में कई समस्याओं पर ढेर हूं। उनमें से एक समस्या यह है कि मुझे अपने आईओएस ऐप से PHP के date फ़ंक्शन के लिए एक पूर्णांक मान भेजने की आवश्यकता है। मैं समाधान के लिए चारों ओर खोज कर रहा हूं, लेकिन उनमें से सभी विपरीत तरीकों से निपट रहे हैं (NSDate int), NSDate पूर्णांक मान के लिए नहीं।

मैंने जवाब here तरह समाधान करने की कोशिश की, लेकिन यह यह रिटर्न डबल, कोई पूर्णांक नहीं स्पष्ट है ...
या this लेकिन इस System time नहीं मिल सका।

मैं मैं के साथ वर्तमान सिस्टम की NSDate मिल सकता है पता है:

NSDate *theDay = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]]; 

लेकिन मैं समझ नहीं सकता कैसे एक पूर्णांक (लंबा) मूल्य में बदलने के लिए।

मुझे केवल उसी मूल्य को प्राप्त करने की आवश्यकता है क्योंकि हम JavaSystem.currentTimeMillis() के साथ प्राप्त कर सकते हैं।

इसके अलावा, यह स्टैक ओवरफ्लो में प्रश्न पूछने का मेरा पहला समय है। इसलिए कृपया मुझे बताएं कि मुझे कुछ प्रश्न पूछना चाहिए/नहीं करना चाहिए, आदि। प्रश्न

धन्यवाद।

उत्तर

7

वर्तमान दिनांक प्राप्त करने के लिए, तो आप इस का उपयोग करना चाहिए:

NSDate *theDate = [NSDate date]; 

एक डबल के रूप में 1 जनवरी, 1970 के बाद से सेकंड में इसे पाने के लिए, के लिए, आप का प्रयोग करेंगे:

NSTimeInterval seconds = [[NSDate date] timeIntervalSince1970]; 

प्राप्त करने के लिए यह एमएस में, केवल पिछले मान को 1000 से गुणा करें और संकलक को किसी भी अतिरिक्त कोड की आवश्यकता के बिना इसे पूर्णांक में डालने दें:

और @HotLicks के रूप में बताते हैं, जबकि System.currentTimeMillis() जीएमटी में है, यदि आप स्थानीय समय की जरूरत है, तो आप इस्तेमाल कर सकते हैं: (। मुझे लगता है कि सबसे वेब सेवाओं जीएमटी चाहते हैं, हालांकि)

long long milliseconds = ([[NSDate date] timeIntervalSince1970] 
         + [[NSTimeZone defaultTimeZone] secondsFromGMT]) * 1000; 

+1

यह चाहिए ध्यान दें कि एनएसडीएटी, यूटीसी/जीएमटी के सापेक्ष डिफ़ॉल्ट/डिज़ाइन द्वारा है, और इसमें कोई टाइमज़ोन जानकारी शामिल नहीं है। यदि कोई "स्थानीय" समय चाहता है तो टाइमज़ोन ऑफ़सेट (उचित रूप से सेकेंड या मिलीसेकंड तक स्केल किया जाना चाहिए) को जोड़ा जाना चाहिए। –

+2

@ हॉटलिक्स: यह भी ध्यान दिया जाना चाहिए कि 'System.currentTimeMillis() '(जावा में) यूटीसी में समय देता है। ;-) – lnafziger

+0

@lnafziger त्वरित और स्पष्ट स्पष्टीकरण और समाधान के लिए धन्यवाद! मैंने वास्तव में पहले यह कोशिश की लेकिन यह हमारे PHP सर्वर से सही परिणाम नहीं लौटा। हालांकि, मैं अब जावा में कुछ त्वरित परीक्षण चलाता हूं और मैं पुष्टि कर सकता हूं कि आपका कोड जावा के वर्तमान टाइममिलिस के समान परिणाम देता है। जैसा कि हॉट लिक्स ने इंगित किया है, शायद मुझे अपने आप पर टाइमज़ोन ऑफसेट जोड़ने की ज़रूरत है (इसलिए, मेरे लिए वास्तव में टाइमज़ोन के साथ मूल्य प्राप्त करने के लिए "आसान तरीका" नहीं है, विधि की सरल एकल पंक्ति के साथ)। मेरे प्रश्न को पढ़ने के लिए समय निकालने के लिए धन्यवाद, और बहुत मदद! –