2012-07-31 97 views
0

我有一個從我的數據庫中獲取的舊日期的NSDate對象。現在我需要將我的UIDatePicker日期設置爲當前日期,但是使用從我的數據庫獲取的存儲NSDate對象中的小時和分鐘值。NSdate的UIDatePicker問題

那麼如何從舊日期提取小時和分鐘並將其設置爲當前UIDatePicker NSdate。

感謝

回答

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

你很快..你在我打字的時候發佈了答案.. +1 – Apurv 2012-07-31 12:33:28

+0

感謝你的回答。只要有一個疑問可以通過這種方式我可以設置上午/下午從我保存的NSDATE相同的方式,爲什麼我們使用NSGregorianCalendar。這是默認的日曆,還是我必須在我的情況下設置其他日曆? – Rishi 2012-07-31 12:38:50

+0

公曆是世界上最常用的日曆,也是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

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