2012-06-21 14 views
11

मैं से [NSDate तारीख] 00:00 (दिन की शुरुआत) के लिए एक NSDate वस्तु प्राप्त करने की आवश्यकता, मान लें कि यदि वर्तमान में यह 11:30 बजे है चलो (द्वारा दिया [NSDate तारीख]), 01/06/2012 पर, अब मुझे 01/06/2012 को 00:00 बजे के लिए एनएसडीएटी होना चाहिए।कैसे 00:00 [NSDate तारीख] के दिन के लिए NSDate पाने के लिए?

मैं इस प्रयास नहीं किया है, लेकिन क्या मेरे मन में है:

NSDate *now = [NSDate date]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now]; 
[components setHour:0]; 
[components setMinute:0]; 
[components setSecond:0]; 
NSDate *morningStart = [calendar dateFromComponents:components]; 

तो मैं पहले आज की तारीख (कहते हैं कि यह 01/06/2012 है) मिलता है, और तिथि के लिए एक NSDateComponent का निर्माण , तो मैं सेट घंटे/मिनट/सेकंड 0 करने के लिए और वर्ष/माह/दिन (यानी। 01/06/2012) तो मैं इस घटक की स्थापना के लिए एक NSDate बना सकते हैं और मैं 00:00 एक तारीख मिल सकता है बदला नहीं जाना चाहिए : 00 01/06/2012?

+0

पुजोलैक्स से उत्तर की जांच करें। यह बहुत बेहतर है और 100% सही है! – iWheelBuy

उत्तर

9

आप क्या कर सही है, लेकिन जब आप NSLog morningStart तारीख GMT समय क्षेत्र में प्रदर्शित किया जाएगा

आप यह सुनिश्चित करें कि तारीख सही है चाहता हूँ, तो यह NSString

को
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MMM-dd HH:mm:ss"]; 
NSString *strFromDate = [formatter stringFromDate:morningStart]; // this will return 2012-Jun-21 00:00:00 
+0

आपके उत्तर के लिए धन्यवाद, लेकिन क्या अंतर है? मुझे केवल NSDate की आवश्यकता है, न कि एनएसडीएटी की एक स्ट्रिंग। – hzxu

+0

अंतर आपके आवेदन को प्रभावित नहीं करता है, एनएसडीट जब भी लॉग होता है तो यह जीएमटी समय क्षेत्र में लॉग इन करेगा, मैंने आपको यह दिखाने के लिए एनएसएसटींग को जोड़ा है कि आपकी तिथि सही है, हालांकि आपकी सुबह स्टार्ट तिथि 100% सही है और यह उस तारीख को रखती है जो आप वास्तव में करते हैं चाहते हैं :) –

+0

ठीक है, बहुत बहुत धन्यवाद! – hzxu

5

कन्वर्ट NSString में कनवर्ट कर रहा NSDate सहायक हो सकता है, लेकिन यदि आप आगे की प्रक्रिया के लिए एक NSDate वस्तु रखने की जरूरत है, यहाँ 0:00:00 समय पर सेट अपने वास्तविक morningStart NSDate वस्तु, समय क्षेत्र की देखभाल के साथ साथ ही है करने के लिए अपने समाधान है ...

: आप देखेंगे के रूप में आप अब तक समाधान से नहीं थे
NSDate *now = [NSDate date]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:now]; 
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; 
int timeZoneOffset = [destinationTimeZone secondsFromGMTForDate:now]/3600; 
[components setHour:timeZoneOffset]; 
[components setMinute:0]; 
[components setSecond:0]; 
NSDate *morningStart = [calendar dateFromComponents:components]; 
+0

बढ़िया! आपका बहुत बहुत धन्यवाद! – iWheelBuy

2

यह startOfDayForDate का उपयोग कर iOS8 में यह करने के लिए बहुत आसान है:

let date = NSDate() 
let calendar = NSCalendar.currentCalendar(calendarIdentifier: NSGregorianCalendar) 
let dateAtStartOfDay = calendar.startOfDayForDate(date) 

या आप स्विफ्ट में परंपरागत तरीके से यह कर सकते हैं इस प्रकार है:

let date = NSDate() 
let calendar = NSCalendar.currentCalendar(calendarIdentifier: NSGregorianCalendar) 
// Use a mask to extract the required components from today's date 
let components = calendar.components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: date) 
let dateAtStartOfDay = calendar.dateFromComponents(components)! 
print(dateAtStartOfDay) 

(नोट: NSDates जीएमटी के सापेक्ष संग्रहित हैं। तो print रिश्तेदार स्थानीय समय प्रदर्शित करेगा। NSZates का सही उपयोग करने के लिए टाइमज़ोन की स्पष्ट समझ आवश्यक है।)

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