DB から取得している古い日付の NSDate オブジェクトがあります。UIDatePicker の日付を現在の日付に設定する必要がありますが、DB から取得した格納済みの NSDate オブジェクトの時間と分の値を使用します。
古い日付から時間と分を抽出し、現在の UIDatePicker NSdate に設定する方法。
ありがとう
DB から取得している古い日付の NSDate オブジェクトがあります。UIDatePicker の日付を現在の日付に設定する必要がありますが、DB から取得した格納済みの NSDate オブジェクトの時間と分の値を使用します。
古い日付から時間と分を抽出し、現在の UIDatePicker NSdate に設定する方法。
ありがとう
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];
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];