получить текущую дату из [NSDate date] , но установить время до 10: 00 утра
Как я могу сбросить текущую дату, полученную из [nsdate date], но затем изменить время до 10:00 утра.
5 ответов:
как и во всех манипуляциях с датой, вы должны использовать NSDateComponents и 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];
В iOS8 Apple представила удобный метод, который экономит несколько строк кода:
NSDate *d = [calendar dateBySettingHour:10 minute:0 second:0 ofDate:[NSDate date] options:0];
Swift:
let calendar: NSCalendar! = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) let now: NSDate! = NSDate() let date10h = calendar.dateBySettingHour(10, minute: 0, second: 0, ofDate: now, options: NSCalendarOptions.MatchFirst)!
этой
nsdate
используется другой формат: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];
не проверено в xcode, хотя :)
Я просто установил часовой пояс с ответом Matthias Bauch, и это сработало для меня. еще он добавлял 18: 30 мин больше.
let cal: NSCalendar = NSCalendar.currentCalendar() cal.timeZone = NSTimeZone(forSecondsFromGMT: 0) let newDate: NSDate = cal.dateBySettingHour(1, minute: 0, second: 0, ofDate: NSDate(), options: NSCalendarOptions())!
вы можете использовать этот метод для любой комбинации минуты / часа / периода (aka 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; }
Просила Пример:
NSDate *todayAt10AM = [self todayModifiedWithHours:@"10" minutes:@"00" andPeriod:@"am"];