2011-01-04 10 views
4

次のiOS 4.2コードが2つの異なる時刻に返されるのはなぜですか?NSDateFormatterが予期しない結果を返す

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    [dateFormatter setTimeZone:gmt]; 
    NSString* dateString = [dateFormatter stringFromDate:[NSDate date]]; 
    NSLog(@"Date/Time is %@", dateString); 

    NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];  
    NSDate* date = [inputFormatter dateFromString:dateString];   
    NSLog(@"Date/Time is %@", date); 

戻り値:

2011-01-04 16:15:12.966 WA[687:207] Date/Time is 2011-01-04 21:15:12 
2011-01-04 16:15:12.967 WA[687:207] Date/Time is 2011-01-05 02:15:12 +0000 

最初の値が期待されているが、私は、第二は同じであると期待されます。ブルース・

+0

フォーマッタはタイムゾーンが設定された場合、時間帯を表示する必要性を見ていないように見えます。 – Joe

答えて

8

どちらもあなたの日付フォーマットの

は、タイムゾーンを含めるように見えるので、あなたはおそらくあなたの場所とGMTとの間の差を取得しています。

+0

最初のNSDateFormatterのタイムゾーンをGMTに設定しています。その値は正しいGMT時間です。 – bvanderw

+0

あなたは正しいと思います。これは、inputFormatterに渡された文字列にシステムタイムゾーンを適用してから、GMTオフセットを表示します。 dateStringはすでにGMTなので、そのNSDateFormatterのタイムゾーンをGMTに設定するのが賢明です。 – bvanderw

2

dateStringはすでにGMTなので、inputFormatterのタイムゾーンもGMTに設定するのが賢明です。

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    [dateFormatter setTimeZone:gmt]; 
    NSString* dateString = [dateFormatter stringFromDate:[NSDate date]]; 
    NSLog(@"Date/Time is %@", dateString); 

    NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [inputFormatter setTimeZone:gmt]; 
    [inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];  
    NSDate* date = [inputFormatter dateFromString:dateString];   
    NSLog(@"Date/Time is %@", date); 

戻ります:このコードは、期待どおりに動作

2011-01-04 16:50:35.369 WA[888:207] Date/Time is 2011-01-04 21:50:35 
2011-01-04 16:50:35.370 WA[888:207] Date/Time is 2011-01-04 21:50:35 +0000 
関連する問題