2015-12-25 76 views
0

我已經使用NSDateFormatter設置dateFromString如下爲什麼時間在這裏顯示不正確?

NSString *string = @"Tuesday, February 3, 2015 10:54:39 PM"; 
NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
[formatter setDateFormat:@"EEEE, MMMM d, y hh:mm:ss a"]; 
NSDate *myDate = [formatter dateFromString:string]; 
NSLog(@"myDate is: %@", [myDate description]); 

輸出是:指明MyDate是:2015年2月3日17時24分39秒+0000

我失去了一些東西在這裏。

+0

你更新你的系統時間? –

+0

5.5小時的時差表明UTC(格林威治標準時間)與印度拉伸時間。 –

+0

@Rob,我認爲它會記錄字符串的確切時間,而不考慮時區(WYSWYG)。感謝您的澄清。另外說「在你的本地時區」,你的意思是,無論系統默認的timeZone設置爲。針對不同時區的所有設備的一種實施方式。 – Napier

回答

0

當你NSLog一個NSDate,它會告訴你在GMT/UTC時間日期的輸出日期(因此+0000)。這是因爲NSDate對象本身不會捕獲時區,只有NSDate對象的字符串表示形式。假設這個輸入字符串在你的本地時區,你的格式化程序是正確的。

如果,雖然,這個輸入字符串是真的GMT/UTC,但此字符串不具有任何事情告訴你,(如+0000Z),那麼你必須明確地告訴了NSDateFormatter你知道,這是不一定是本地時區,而你知道,原來的字符串是在一個特定的時區,例如:

NSString *string = @"Tuesday, February 3, 2015 10:54:39 PM"; 
NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
formatter.dateFormat = @"EEEE, MMMM d, y hh:mm:ss a"; 
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 
NSDate *myDate = [formatter dateFromString:string]; 

只要記住,只要你NSLog一個NSDate,它會顯示它在格林威治標準時間/ UTC。如果您想在當地時區顯示NSDate,則使用NSDateFormatter方法stringFromDate:(不指定格式化程序的timeZone屬性,從而默認爲本地時區)。

順便說一句,有關從Web服務解析時區時的其他注意事項,請參見Apple Technical Q&A 1480。值得注意的是,解析,你知道是在公曆,不管什麼日曆格式的用戶正在使用的日期時,那麼你可能還需要明確指定格式的locale

formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; 
0

轉換在UTC甲讓你有時間GMT時間之間的不同添加到UTC時間如下

NSString *string = @"Tuesday, February 3, 2015 10:54:39 PM"; 
NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
[formatter setDateFormat:@"EEEE, MMMM d, y hh:mm:ss a"]; 
NSTimeZone* currentTimeZone = [NSTimeZone localTimeZone]; 
NSInteger currentGMTOffset = [currentTimeZone secondsFromGMT]; 
NSDate *myDate = [formatter dateFromString:string]; 
myDate = [NSDate dateWithTimeInterval:currentGMTOffset sinceDate:myDate] ; 
NSLog(@"myDate is: %@", [myDate description]); 
相關問題