2012-11-03 35 views
2
int hour = [[array objectAtIndex:0] intValue]; //hour = 17 
int min = [[array objectAtIndex:1] intValue]; //min = 51 
NSLog(@"hour value is %d",hour); 
NSLog(@"min value is %d",min); 
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]]; 

int year = [components year]; 
int month = [components month]; 
int day = [components day]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
dateFormatter.timeStyle = NSDateFormatterNoStyle; 

[components setYear:year]; 
[components setMonth:month]; 
[components setDay:day]; 
[components setHour:hour]; 
[components setMinute:min]; 
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] ; 
NSDate *itemDate = [cal dateFromComponents:components]; 
NSLog(@"the date is %@",itemDate); 

輸出: 日期爲2012-11-03 01:00:00 +0000。但我想要的輸出是2012-11-03 17:51:00 ..我能得到它嗎?我做錯了什麼?用客戶端c中的用戶選擇時間創建NSDate

+1

嘗試'NSLog(「%@」,array);'在您的方法的頂部。我懷疑你的初始值是不正確的,因爲其餘的都應該工作。 – lnafziger

+0

@ Inafziger.Thanks。我添加了小時和分鐘的日誌,分別顯示19和59。因爲我現在測試的時間。太平洋標準時間晚上7:59和我得到的輸出「日期是2012-11-03 02:57:00 +0000」。 – RookieAppler

+0

我剛剛在我的系統上運行這個,並手動設置小時和分鐘爲17和51.我的輸出是:'2012-11-02 23:16:29.788測試應用程序[99155:fb03]日期是2012-11-02 21 :51:00 + 0000「(因我的時區而關閉4小時),其工作原理與其應有的完全相同。 – lnafziger

回答

0

看來你的問題是沒有意識到NSDate對象將使用自己當前時區創建,但NSLog會打印出使用UTC的NSDate說明一個簡單的事情。由於您似乎在PDT(本週末美國時鐘更改後將會是PST),您的NSLog應顯示所需的日期/時間,但它顯示爲7小時(本週末晚8小時)關閉。

要在當地時區顯示您的日期,請使用NSDateFormatterNSDate轉換爲NSString

+0

@ rmaddy.Thanks很多朋友。是完全關閉了7個小時。所以我採取了你的建議,並使用NSDateFormatter獲取當地時區的日期。 +1解釋這一點。 – RookieAppler

0
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]]; 
NSLog(@"the date is %@", dateString); 
+0

謝謝。我知道了。用你的例子和rmaddy解釋來使它工作。 – RookieAppler