दिलचस्प पोस्ट
एंड्रॉइड में दृश्यपेज नियंत्रक की गति धीमी सूचक को पॉइंटर्स कैसे सी में काम करते हैं? पायथन – प्रारंभिक क्षमता के साथ एक सूची बनाएं जावास्क्रिप्ट के साथ स्क्रॉलबार स्थिति कैसे प्राप्त करें? Matplotlib 2 सबप्लॉट, 1 रंग बार `WinMain @ 16 'के लिए अपरिभाषित संदर्भ मैं सी या सी ++ का उपयोग कर निर्देशिका में फाइलों की सूची कैसे प्राप्त करूं? हैं "(फ़ंक्शन () {}) ()" और "(फ़ंक्शन () {} ())" जावास्क्रिप्ट में कार्यात्मक रूप से बराबर? स्व संदर्भित संरचना परिभाषा? Mongodb गहरा नेस्टेड उप-दस्तावेज को अद्यतन करता है फिक्स्ड-आकार फ्लोटिंग पॉइंट प्रकार एक सरणी में व्युत्क्रम की गिनती LINQ के लिए जावा बराबर क्या है? जावास्क्रिप्ट में एक तारीख को बढ़ाना MKMapView या UIWebView ऑब्जेक्ट पर छूने वाले घटनाओं को कैसे रोकें?

कैसे जांच करें कि क्या एनएसडीटी दो अन्य एनएसडीटियों के बीच होता है

मैं यह पता लगाने की कोशिश कर रहा हूं कि एनएसडीटेट की सहायता से वर्तमान दिनांक एक तारीख सीमा के भीतर आता है या नहीं।

उदाहरण के लिए, आप NSDate का उपयोग करके वर्तमान तिथि / समय प्राप्त कर सकते हैं:

NSDate rightNow = [NSDate date]; 

मैं तब उस तारीख का उपयोग करना चाहूंगा ताकि वह 9 एएम -5 पीएम की सीमा में है या नहीं।

वेब के समाधान से एकत्रित समाधान "कैसे जांच करें कि क्या एनएसडीटी दो अन्य एनएसडीटियों के बीच होता है"

मैं एक समाधान के साथ आया था यदि आपके पास एक बेहतर समाधान है, तो इसे छोड़ने में संकोच न करें और मैं इसे सही के रूप में चिह्नित कर दूंगा।

 + (BOOL)date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate { if ([date compare:beginDate] == NSOrderedAscending) return NO; if ([date compare:endDate] == NSOrderedDescending) return NO; return YES; } 

पहले भाग के लिए, एनपीएनआई ऑब्जेक्ट्स का निर्माण करने के लिए @ कैपरियुआ से जवाब का उपयोग करें, जिन्हें आप तुलना करना चाहते हैं। अपने खुद के प्रश्न के उत्तर से, ऐसा लगता है कि आपके पास यह पता चल गया है।

तारीखों की वास्तव में तुलना करने के लिए, मैं आपके जवाब पर @Tim की टिप्पणी के साथ पूरी तरह सहमत हूं। यह अभी तक वास्तव में आपके कोड के बराबर है, और मैं इसकी व्याख्या क्यों करूं?

 + (BOOL) date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate { return (([date compare:beginDate] != NSOrderedAscending) && ([date compare:endDate] != NSOrderedDescending)); } 

यद्यपि यह प्रतीत हो सकता है कि रिटर्न स्टेटमेंट को && ऑपरेटर के दोनों ऑपरेंडों का मूल्यांकन करना चाहिए, यह वास्तव में मामला नहीं है। कुंजी " शॉर्ट-सर्किट मूल्यांकन " है, जो कि विभिन्न प्रकार की प्रोग्रामिंग भाषाओं में कार्यान्वित होती है, और निश्चित रूप से सी में निश्चित रूप से, ऑपरेटरों और && "शॉर्ट सर्किट" अगर पहली तर्क 0 (या नहीं, शून्य, आदि) है ।), जबकि | और || ऐसा ही करते हैं, यदि पहली तर्क 0 नहीं है । यदि date होने से पहले आता है, तो परीक्षा बिना beginDate साथ तुलना करने के लिए भी रिटर्न देती है। असल में, यह आपके कोड के समान है, लेकिन एक पंक्ति में एक पंक्ति में, 5 (या 7, सफेद स्थान के साथ) नहीं।

इसका उद्देश्य रचनात्मक इनपुट के लिए है, क्योंकि जब प्रोग्रामर अपनी विशेष प्रोग्रामिंग भाषा को तर्कसंगत अभिव्यक्ति का मूल्यांकन करते हैं, तो वे दक्षता के बारे में बहुत अधिक बिना उन्हें प्रभावी ढंग से बना सकते हैं। हालांकि, ऐसे परीक्षण भी हैं जो कम कुशल होंगे, क्योंकि सभी ऑपरेटर शॉर्ट सर्किट नहीं हैं। (वास्तव में, अधिकांश संख्यात्मक तुलना ऑपरेटरों जैसे शॉर्ट-सर्किट नहीं कर सकते हैं ।) जब संदेह होता है, तो आपके तर्क को तोड़ने में स्पष्ट रूप से स्पष्ट होना हमेशा सुरक्षित होता है, लेकिन जब आप भाषा / कंपाइलर को छोटी चीज़ों को संभालने देते हैं तो कोड अधिक पढ़ा जा सकता है तुम्हारे लिए।

स्विफ्ट में ब्रॉक वूल्फ संस्करण:

 extension NSDate { func isBetweenDates(beginDate: NSDate, endDate: NSDate) -> Bool { if self.compare(beginDate) == .OrderedAscending { return false } if self.compare(endDate) == .OrderedDescending { return false } return true } } 

यदि आप जानना चाहते हैं कि वर्तमान दिनांक दो बिंदुओं के बीच में (9: 00 -5 पीएम 7/1/09 को) के बीच आता है, तो एनएससीएल्लेंडर और एनएसडीएट कॉन्ट्रॉइंट्स का उपयोग वांछित समय के लिए एनएसडीट उदाहरण बनाने और वर्तमान तिथि के साथ उनकी तुलना करें।

यदि आप जानना चाहते हैं कि वर्तमान तिथि इन दिनों के दो घंटों के बीच आती है, तो आप शायद दूसरी तरफ जा सकते हैं। एक NSDateComponents बनाएँ और NSCalendar और अपने NSDate के साथ और घंटे घटकों की तुलना करें।

यह तिथियों की समय-सीमा का उपयोग आसानी से किया जा सकता है, जैसे:

 const NSTimeInterval i = [date timeIntervalSinceReferenceDate]; return ([startDate timeIntervalSinceReferenceDate] <= i && [endDate timeIntervalSinceReferenceDate] >= i); 

क्विन और ब्रोक के समाधानों के साथ जारी रखने, उप-वर्ग एनएसडीएटी कार्यान्वयन के लिए बहुत अच्छा है, इसलिए इसे इस तरह हर जगह इस्तेमाल किया जा सकता है:

 -(BOOL) isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate { return (([self compare:beginDate] != NSOrderedAscending) && ([self compare:endDate] != NSOrderedDescending)); } 

और अपने कोड के किसी भी हिस्से में आप इसे इसका उपयोग कर सकते हैं:

 [myNSDate isBetweenDate:thisNSDate andDate:thatNSDate]; 

(मैनेजेटेड, एनएनएसटी और एनएएसडीट्स कोर्स के हैं)

स्विफ्ट में एक बेहतर संस्करण:

 @objc public class DateRange: NSObject { let startDate: Date let endDate: Date init(startDate: Date, endDate: Date) { self.startDate = startDate self.endDate = endDate } @objc(containsDate:) func contains(_ date: Date) -> Bool { let startDateOrder = date.compare(startDate) let endDateOrder = date.compare(endDate) let validStartDate = startDateOrder == .orderedAscending || startDateOrder == .orderedSame let validEndDate = endDateOrder == .orderedDescending || endDateOrder == .orderedSame return validStartDate && validEndDate } }