2012-06-24 23 views
22

'dan bir ve zaman bileşeninden tarih bileşeniyle Uygulamamda UIDatePickerModeDate ve bir tanesi UIDatePickerModeTime ile yapılandırılmış iki UIDatePicker denetime sahibim.NSDate, başka bir NSDate

Bir NSDate nesnesini UIDatePicker öğesinden bir tarih ve ikincisinden saat ile yapılandırmak istiyorum ... nasıl?

sayesinde Mark

cevap

56

DATE1 varsayalım ve DATE2 senin iki NSDate değerlerdir. date1 tarih bileşenlerinizi içerir ve tarih2 zaman bileşenlerinizi içerir. Burada onları biraraya birleştirmek gibi olacaktır:

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

// Extract date components into components1 
NSDateComponents *components1 = [gregorianCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit 
                fromDate:date1]; 

// Extract time components into components2 
NSDateComponents *components2 = [gregorianCalendar components:NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit 
                fromDate:date2]; 

// Combine date and time into components3 
NSDateComponents *components3 = [[NSDateComponents alloc] init]; 

[components3 setYear:components1.year]; 
[components3 setMonth:components1.month]; 
[components3 setDay:components1.day];  

[components3 setHour:components2.hour]; 
[components3 setMinute:components2.minute]; 
[components3 setSecond:components2.second];   

// Generate a new NSDate from components3. 
NSDate *combinedDate = [gregorianCalendar dateFromComponents:components3]; 

// combinedDate contains both your date and time! 

iOS 8.0 için + Swift ise

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 

// Extract date components into components1 
NSDateComponents *components1 = [gregorianCalendar components:(NSCalendarUnit)(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) 
                fromDate:date1]; 

// Extract time components into components2 
NSDateComponents *components2 = [gregorianCalendar components:(NSCalendarUnit)(NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) 
                fromDate:date2]; 

// Combine date and time into components3 
NSDateComponents *components3 = [[NSDateComponents alloc] init]; 

[components3 setYear:components1.year]; 
[components3 setMonth:components1.month]; 
[components3 setDay:components1.day]; 

[components3 setHour:components2.hour]; 
[components3 setMinute:components2.minute]; 
[components3 setSecond:components2.second]; 

// Generate a new NSDate from components3. 
NSDate * combinedDate = [gregorianCalendar dateFromComponents:components3]; 

// combinedDate contains both your date and time! 
+0

HI melsam oldukça manuel ama bu çalışması gerekir: D teşekkürler! – Cornelius

+0

İyi çalışma ahbabı ... Teşekkürler –

+0

teşekkürler bir milyon –

5
NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 
NSDate *date = [NSDate date];//datapicker date 
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date]; 

NSInteger year = [dateComponents year]; 
NSInteger month = [dateComponents month]; 
NSInteger day = [dateComponents day]; 
NSInteger hour = [dateComponents hour]; 
NSInteger minute = [dateComponents minute]; 
NSInteger second = [dateComponents second]; 
6

:

let calendar = NSCalendar.currentCalendar() 
let date1 = NSDate() // PickerDateMode 
let date2 = NSDate() // PickerHourMode 

let componentsOne = calendar.components([.Year, .Month, .Day], fromDate: date1) 
let componentsTwo = calendar.components([.Hour, .Minute], fromDate: date2) 

let totalComponents = NSDateComponents() 
totalComponents.year = componentsOne.year 
totalComponents.month = componentsOne.month 
totalComponents.day = componentsOne.day 
totalComponents.hour = componentsTwo.hour 
totalComponents.minute = componentsTwo.minute 

let finalDate = calendar.dateFromComponents(totalComponents) 
İlgili konular