iphone ipad nsdate

iphone - obtener la fecha actual de[NSDate date] pero establecer la hora a las 10:00 a.m.



ipad (5)

¿Cómo puedo restablecer la fecha actual recuperada de [NSDate date] pero luego cambiar la hora a las 10:00 de la mañana?


Acabo de configurar la zona horaria con la respuesta de Matthias Bauch. Y funcionó para mí. de lo contrario, agregaba 18:30 min más.

let cal: NSCalendar = NSCalendar.currentCalendar() cal.timeZone = NSTimeZone(forSecondsFromGMT: 0) let newDate: NSDate = cal.dateBySettingHour(1, minute: 0, second: 0, ofDate: NSDate(), options: NSCalendarOptions())!


Al igual que con todas las manipulaciones de fecha, debe usar NSDateComponents y NSCalendar

NSDate *now = [NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian]; NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now]; [components setHour:10]; NSDate *today10am = [calendar dateFromComponents:components];

en iOS8, Apple introdujo un método práctico que guarda algunas líneas de código:

NSDate *d = [calendar dateBySettingHour:10 minute:0 second:0 ofDate:[NSDate date] options:0];

Rápido:

let calendar: NSCalendar! = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) let now: NSDate! = NSDate() let date10h = calendar.dateBySettingHour(10, minute: 0, second: 0, ofDate: now, options: NSCalendarOptions.MatchFirst)!


Puede usar este método para cualquier combinación de minuto / hora / período (también conocido como am / pm):

- (NSDate *)todayModifiedWithHours:(NSString *)hours minutes:(NSString *)minutes andPeriod:(NSString *)period { NSDate *todayModified = NSDate.date; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSMinuteCalendarUnit fromDate:todayModified]; [components setMinute:minutes.intValue]; int hour = 0; if ([period.uppercaseString isEqualToString:@"AM"]) { if (hours.intValue == 12) { hour = 0; } else { hour = hours.intValue; } } else if ([period.uppercaseString isEqualToString:@"PM"]) { if (hours.intValue != 12) { hour = hours.intValue + 12; } else { hour = 12; } } [components setHour:hour]; todayModified = [calendar dateFromComponents:components]; return todayModified; }

Ejemplo solicitado:

NSDate *todayAt10AM = [self todayModifiedWithHours:@"10" minutes:@"00" andPeriod:@"am"];


este nsdate utilizó un formato diferente:

NSDateFormatter *format = [[NSDateFormatter alloc] init]; [format setDateFormat:@"MMM dd, yyyy HH:mm"]; NSDate *now = [[NSDate alloc] init]; NSString *dateString = [format stringFromDate:now]; NSDateFormatter *inFormat = [[NSDateFormatter alloc] init]; [inFormat setDateFormat:@"MMM dd, yyyy"]; NSDate *parsed = [inFormat dateFromString:dateString];


NSDate *currentDate = [NSDate date]; NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setHour:10]; NSDate *date = [gregorian dateByAddingComponents:comps toDate:currentDate options:0]; [comps release];

Sin embargo, no probado en xcode :)