2013-02-22 9 views
12

के दौरान है जब मेरा ऐप लॉन्च किया गया है, तो मैं यह जांचना चाहता हूं कि दिनांक 9: 00-18: 00 के बीच है या नहीं।यह जांचने के लिए कि दिनांक अब 9: 00-18: 00

और अब मैं NSDate का उपयोग कर समय प्राप्त कर सकता हूं। मैं समय की जांच कैसे कर सकता हूं?

+0

यह जांचने के लिए कि दिनांक दो अन्य तिथियों के बीच है या नहीं, लिंक देखें: http://stackoverflow.com/a/1072993/2092007 –

+0

@kshin धन्यवाद आपके लिंक के लिए, यह एक अलग है, क्योंकि यह निश्चित नहीं है दिन या महीना, यह "आज" 9: 00-18: 00 – Relex

+2

है, यह हमेशा दुनिया में कहीं 9:00 और 18:00 के बीच रहता है। :) – nickgrim

उत्तर

19

इतने सारे जवाब और इतने सारे दोषों ...

आप में NSDateFormatter उपयोग कर सकते हैं किसी तारीख से उपयोगकर्ता के अनुकूल स्ट्रिंग प्राप्त करने के लिए आदेश। लेकिन यह बहुत तारीख तुलना के लिए उस स्ट्रिंग का उपयोग करने के लिए बुरा विचार है! आप एक तिथि के वर्ष, माह, दिन, घंटे, मिनट, आदि के बारे में जानकारी प्राप्त करना चाहते हैं
कृपया अपने प्रश्न है कि तार का उपयोग करना शामिल ...

के लिए किसी भी सवाल का जवाब उपेक्षा, आप NSCalendar और NSDateComponents उपयोग करना चाहिए।

आदेश है कि क्या एक तारीख है 9:00 और 18:00 बजे के बीच आप निम्न कर सकते जाँच करने के लिए:

NSDate *date = [NSDate date]; 
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit fromDate:date]; 

if (dateComponents.hour >= 9 && dateComponents.hour < 18) { 
    NSLog(@"Date is between 9:00 and 18:00."); 
} 

संपादित करें:
ओह, dateComponents.hour <= 18 का उपयोग कर दिनांकों गलत परिणाम में परिणाम होगा 18:01 की तरह dateComponents.hour < 18 जाने का रास्ता है। ;)

+0

इसके लिए अच्छा एक +1 और स्वीकार्य उत्तर होना चाहिए :) –

+0

हां यह सबसे अच्छा समाधान है, हालांकि यह स्टैक ओवरफ्लो है और इसका मतलब है कि इसे जरूरी नहीं माना जाएगा ... – trojanfoe

+0

हाँ आप सही हैं, अच्छा जवाब – Relex

6

09:00 के लिए निर्माण दिनांक और 18:00 आज और उन तारीखों के साथ वर्तमान समय की तुलना:

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *now = [NSDate date]; 
NSDateComponents *components = [cal components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now]; 

[components setHour:9]; 
[components setMinute:0]; 
[components setSecond:0]; 
NSDate *nineHundred = [cal dateFromComponents:components]; 

[components setHour:18]; 
NSDate *eighteenHundred = [cal dateFromComponents:components]; 

if ([nineHundred compare:now] != NSOrderedDescending && 
    [eighteenHundred compare:now] != NSOrderedAscending) 
{ 
    NSLog(@"Date is between 09:00 and 18:00"); 
} 
+0

हाय दोस्तों, आपके तरीकों के लिए धन्यवाद, मैं समझता हूं कि आपका क्या मतलब है, लेकिन नौ सौ और अठारह सौ शून्य है, मुझे लगता है कि मैं बग ठीक कर सकता हूं, आपकी विधि – Relex

+0

@ रिलेक्स के लिए धन्यवाद और फिक्स की आवश्यकता क्या है? कृपया मेरा उत्तर अपडेट करें क्योंकि तुलना के लिए जरूरी तिथियां बनाने का यह सबसे अच्छा तरीका है। – trojanfoe

+0

धन्यवाद! यह एकमात्र उत्तर है जो तुलना करने के लिए 'NSCalendar' का उपयोग कर रहा है। अभी भी आशा है। तुलना के लिए दो तिथियों का निर्माण आवश्यक नहीं है, हालांकि। आप जांच सकते हैं कि घटक की 'घंटा' संपत्ति 9 से 18 के बीच है या नहीं। इसके अलावा, सप्ताह, सप्ताहांत, टाइमज़ोन कैलेंडर इकाइयों की आवश्यकता नहीं है। –

संबंधित मुद्दे