1

我有一个来自我的数据库的旧日期的 NSDate 对象。现在我需要将我的 UIDatePicker 日期设置为当前日期,但使用从我的数据库中获得的存储的 NSDate 对象的小时和分钟值。

那么如何从旧日期中提取小时和分钟并将其设置为当前的 UIDatePicker NSdate。

谢谢

4

2 回答 2

4

由于 NSDate 在初始化后无法更改,因此您必须重新创建它:

要获取 NSDate 的小时和分钟部分,请使用 NSCalendar:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit  | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:yourOriginalDateHere];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
NSInteger second = [dateComponents second];

然后你可以创建一个新的 NSDate(也使用 NSCalendar):

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSYearCalendarUnit  | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; //[NSDate date] is the current date
[dateComponents setHour:hour];
[dateComponents setMinute:minute];
[dateComponents setSecond:second];
NSDate *newDate = [gregorian dateFromComponents:dateComponents];
于 2012-07-31T12:28:27.467 回答
2
 NSCalendar *cal = [NSCalendar autoupdatingCurrentCalendar];
 NSDateComponents *dbDateComps = [cal components:(kCFCalendarUnitHour | kCFCalendarUnitMinute) fromDate:YOUR_DATE_FRM_DB];
 NSDateComponents *currentComps = [cal components:(kCFCalendarUnitYear | kCFCalendarUnitMonth | kCFCalendarUnitDay) fromDate:[NSDate date]];
 [currentComps setHour:[dbDateComps hour]];
 [currentComps setMinute:[dbDateComps minute]];

 NSDate *resultDate = [currentComps date];
于 2012-07-31T12:32:58.420 回答