2012-06-24 10 views

Respuesta

56

Supongamos fecha1 y la fecha 2 son los dos valores NSDate. fecha1 contiene sus componentes de fecha y fecha2 contiene sus componentes de hora. He aquí cómo usted combinarlos:

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! 

Para iOS 8,0 +

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, bastante manual, pero eso debería funcionar: D gracias! – Cornelius

+0

Buen trabajo amigo ... Muchas gracias –

+0

gracias un millón –

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

En Swift:

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) 
Cuestiones relacionadas