我有一個從我的數據庫中獲取的舊日期的NSDate對象。現在我需要將我的UIDatePicker日期設置爲當前日期,但是使用從我的數據庫獲取的存儲NSDate對象中的小時和分鐘值。NSdate的UIDatePicker問題
那麼如何從舊日期提取小時和分鐘並將其設置爲當前UIDatePicker NSdate。
感謝
我有一個從我的數據庫中獲取的舊日期的NSDate對象。現在我需要將我的UIDatePicker日期設置爲當前日期,但是使用從我的數據庫獲取的存儲NSDate對象中的小時和分鐘值。NSdate的UIDatePicker問題
那麼如何從舊日期提取小時和分鐘並將其設置爲當前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];
你很快..你在我打字的時候發佈了答案.. +1 – Apurv 2012-07-31 12:33:28
感謝你的回答。只要有一個疑問可以通過這種方式我可以設置上午/下午從我保存的NSDATE相同的方式,爲什麼我們使用NSGregorianCalendar。這是默認的日曆,還是我必須在我的情況下設置其他日曆? – Rishi 2012-07-31 12:38:50
公曆是世界上最常用的日曆,也是iOS的默認日曆。至於上午/下午:NSDateComponents使用24小時系統(上午11:00 =上午11:00,下午13:00 =下午1:00,下午16:00 =下午4:00等)。如果您轉換爲NSDate,則當應用程序的當前日期時間區域設置爲12小時系統時,24小時值將正確更改爲AM/PM。 – 2012-07-31 12:55:59