Rishi
Rishi

Reputation: 3539

UIDatePicker issue with NSdate

i have an NSDate object from an old date which i am getting from my DB. Now i need to set my UIDatePicker date to current date but with hour and minute value from my stored NSDate object which i have got from my DB.

So how to extract hour and minute from old date and set it to current UIDatePicker NSdate.

Thanks

Upvotes: 1

Views: 785

Answers (2)

Apurv
Apurv

Reputation: 17186

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

Upvotes: 2

Leon Lucardie
Leon Lucardie

Reputation: 9730

Since a NSDate can't be changed after it's initialization, you have to recreate it:

To get the hour and minute component of the NSDate use 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];

Then you can create a new NSDate (also using 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];

Upvotes: 4

Related Questions