NSdate的UIDatePicker问题

时间:2012-07-31 12:03:00

标签: ios nsdate nsdateformatter uidatepicker

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

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

由于

2 个答案:

答案 0 :(得分:3)

由于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];

答案 1 :(得分: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];