2011-01-04 2 views
4

Почему следующий код iOS 4.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, трюк заключается в том, чтобы установить часовой пояс на GMT на этом NSDateFormatter. – bvanderw

2

Поскольку датаString уже является GMT, фокус в том, чтобы установить часовой пояс на GMT на inputFormatter. Этот код работает, как ожидалось:

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