Tengo NSDate* day1
y NSDate* day2
. ¿Cómo puedo hacer un NSDate* day3
copiando solo año/mes/día desde el día1 y hora/minuto/segundo desde el día2?Crear un nuevo NSDate combinando dos NSDates
6
A
Respuesta
15
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:day1];
NSDate *day3 = [[NSCalendar currentCalendar] dateFromComponents:comps];
unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:day2];
day3 = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:day3 options:0];
Fuentes:
0
Necesita crear un NSCalendar y luego obtener los componentes de fecha de la primera y segunda fecha y luego obtener la fecha utilizando los nuevos componentes de fecha de NSCalendar.
métodosUsa el NSCalendar
– components:fromDate:
– dateFromComponents:
y las banderas de unidades correspondientes
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit;
1
No es tan compacto como darvids0n, pero funciona.
NSDate* day1 = [datePicker dateValue];
NSDate* day2 = [NSDate date];
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:day1;
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit fromDate:day2];
NSInteger hour = [components hour];
NSInteger minute = [components minute];
NSInteger second = [components second];
NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease];
[comps setDay:day];
[comps setMonth:month];
[comps setYear:year];
[comps setHour:hour];
[comps setMinute:minute];
[comps setSecond:second];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *day3 = [cal dateFromComponents:comps];
o
NSDateFormatter *tempFormatter = [[[NSDateFormatter alloc]init]autorelease];
[tempFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString* message = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second];
NSDate *day3 = [tempFormatter dateFromString:message];
0
Para los registros, aquí es un enfoque más general
@implementation NSDate (Additions)
- (void)assignFlags:(NSUInteger)unitFlags to:(NSDateComponents *)components {
NSDateComponents *myComponents =
[[NSCalendar currentCalendar] components: unitFlags
fromDate: self];
if (unitFlags & NSYearCalendarUnit)
[components setYear: [myComponents year]];
if (unitFlags & NSMonthCalendarUnit)
[components setMonth: [myComponents month]];
if (unitFlags & NSDayCalendarUnit)
[components setDay: [myComponents day]];
if (unitFlags & NSHourCalendarUnit)
[components setHour: [myComponents hour]];
if (unitFlags & NSMinuteCalendarUnit)
[components setMinute: [myComponents minute]];
if (unitFlags & NSSecondCalendarUnit)
[components setSecond: [myComponents second]];
}
- (NSDate *)dateByTakingComponents:(NSUInteger)unitFlags fromDate:(NSDate *)date {
NSUInteger allFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit |
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *allComponents = [[NSDateComponents alloc] init];
[date assignFlags: unitFlags to: allComponents];
[self assignFlags: allFlags & ~unitFlags to: allComponents];
NSDate *result = [[NSCalendar currentCalendar] dateFromComponents: allComponents];
[allComponents release];
return result;
}
@end
Se le puede llamar como esto
NSDate *day3 =
[day2 dateByTakingComponents: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
fromDate: day1];
Cuestiones relacionadas
- 1. NSFecha entre dos NSDates dados
- 2. Comparar dos NSDates
- 3. Diferencia entre dos NSDates
- 4. Comparar dos NSDates para la misma fecha/hora
- 5. Combinando dos Enumeratees
- 6. clasificar un NSArray de NSDates
- 7. Comparación de NSDates
- 8. NSDate, comparando dos fechas
- 9. Combinando dos montones binarios perfectos?
- 10. Combinando dos videos de ffmpeg
- 11. combinando dos variables de cadena
- 12. ¿Convertir una descripción de NSDate en un NSDate?
- 13. .NET: combinando dos listas genéricas
- 14. Crear NSDate Monotouch
- 15. Comparando el tiempo de dos NSDates, ignorando el componente de fecha
- 16. combinando resultados de dos declaraciones de selección
- 17. crear un NSDate de una cadena
- 18. ¿Cómo crear un objeto de fecha NSDate?
- 19. Combinando java.util.Dates para crear una fecha-hora
- 20. Combinando
- 21. Combinando dos expresiones regulares C++ 0x
- 22. ggplot combinando dos gráficos de diferentes data.frames
- 23. Comparando ciertos componentes de NSDate?
- 24. Diferencia en horas entre dos NSDate
- 25. la sustracción de dos objetos NSDate
- 26. Comparando un NSDate con [NSDate date]
- 27. Php: ¿Paréntesis al crear un objeto nuevo?
- 28. Combinando EnumSets Java
- 29. ¿La forma más simple de recorrer dos NSDates en el iPhone?
- 30. NSDate restar un mes
Para evitar problemas con el verano I recomendamos configurar el calendario actual en la zona horaria UTC. –