2012-07-10 141 views
1

我嘗試將我的NSString轉換爲NSDate對象,但NSDateFormatter返回給我一個奇怪的值。NSString到NSDate返回錯誤的日期

這裏是代碼:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm"]; 
NSDate *date = [dateFormat dateFromString:@"2012-08-15 00:00"]; 
[dateFormat release]; 

date值爲2012-08-14 21:00 +0000NSString值與NSDate值之間的差值爲3小時。我想我錯過了什麼,但我不知道是什麼。

+0

如果你嘗試'的NSDate *日期= [DATEFORMAT dateFromString:@ 「2012-08-14 24:00」];'? – 2012-07-10 07:57:09

+1

@ mavrick3不,dateformatter返回無 – 2012-07-10 07:58:38

+2

[從\ [NSDate date \]關閉幾個小時獲取日期](http://stackoverflow.com/questions/8466744/getting-date-from-nsdate-date由幾個小時) – 2012-07-10 07:59:16

回答

6

這是我使用:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"]; 

NSDate *date = [dateFormat dateFromString:@"2012-08-15 00:00:00 +0000"]; 
NSLog(@"\n\n DATE: %@ \n\n\n", date); 

+0000是時區,所以一定要確保你使用您的時區,如+0400

編輯: 如果你不能改變的字符串,可以使用此代碼來做到這一點:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm"]; 
[dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

NSDate *date = [dateFormat dateFromString:@"2012-08-15 00:00"]; 
+0

不幸的是,我從Web服務器收到這個值,它返回的字符串沒有+0000 – 2012-07-10 08:12:01

+0

@TimurMustafaev查看我的編輯 – Adam 2012-07-10 08:24:32

0

,因爲我知道的NSDate持有Grinwich時間,所以如果你是在莫斯科時間,一切都是萊特

-1

正如評論所說,如果你收到的日期是UTC,那麼你需要轉換它到您當地的時區。 Apple建議您在顯示日期時始終使用正確配置的NSDateFormatter來處理本地化問題。

下面是打開一個NSDate成一個NSString一些示例代碼:

NSDate *date = // initialised elsewhere 

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
dateFormat.locale = [NSLocale currentLocale]; 
dateFormat.timeZone = [NSTimeZone localTimeZone]; 
dateFormat.timeStyle = NSDateFormatterShortStyle; 
dateFormat.dateStyle = NSDateFormatterShortStyle;  
dateFormat.locale = [NSLocale currentLocale]; 
NSString *dateAsString = [dateFormat stringFromDate:date]; 
0

在目標下NSDate的,如果你沒有設置setTimeZone,NSDate的將採取默認的時區爲localTimeZone。所以如果你需要得到你提供的NSString字符串格式的確切日期,你需要將TimeZone設置爲UTC。按照示例代碼,我想這會對你有所幫助。

NSDateFormatter *loacalformatter=[[NSDateFormatter alloc]init]; 
[loacalformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *localDate =[loacalformatter dateFromString:@"2012-08-15 00:00"]; 
NSLog(@"localDate :%@",localDate); 


NSDateFormatter *UTCformatter=[[NSDateFormatter alloc]init]; 
[UTCformatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 
[UTCformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *UTCDate =[UTCformatter dateFromString:@"2012-08-15 00:00"]; 
NSLog(@"UTCDate :%@",UTCDate); 
UTCDate :2012-08-15 00:00 +0000 (GMT+00:00)