2013-03-16 3 views
2

Мой iPhone 4 с iOS5 и iPhone5 с iOS6 имеют настройку часового пояса, как Нью-Йорк, я хотел бы разобрать строку даты, как «15 марта, 07:25 вечера EDT», а затем переформатировать и отображения только время например, «19:25 PM», на iOS5 он всегда меняется на EST, а затем отсутствует час, когда дневной свет находится в эффекте.NSDateFormater странно behaivor

Следующий код будет демонтировать эту проблему.

NSDateFormatter* formater= [[NSDateFormatter alloc] init]; 
[formater setDateFormat:@"MMM d, hh:mma z"]; 
NSDate * date = [NSDate date]; 
NSString * strDate = [formater stringFromDate:date]; 
NSLog(@"%@", strDate); 
// Output "Mar 15, 07:25PM EDT" on iPhone5(iOS6) and iPhone4 (iOS5) 

date = [formater dateFromString:strDate]; 
strDate = [formater stringFromDate:date]; 
NSLog(@"%@", strDate); 
// Output Mar 15, 07:25PM EST on iPhone5(iOS6) 
// Output Mar 15, 06:25PM EST on iPhone4 (iOS5) 

Я также попытался установить часовой пояс явно с помощью «EDT», не помогает.

ответ

0

Попробуйте

Измените timeZoneWithAbbreviation EST или CDT.

NSDate* today = [NSDate date]; 

NSTimeZone* cSTTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"CDT"]; 
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; 

NSInteger sourceGMTOffset = [cSTTimeZone secondsFromGMTForDate:today]; 
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:today]; 
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; 
NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:today]; 
NSDateFormatter* formaters= [[NSDateFormatter alloc] init]; 
[formaters setDateFormat:@"MMM d, hh:mma z"]; 
NSString * strDates = [formaters stringFromDate:destinationDate]; 
NSLog(@"%@", strDates); 
0

установки локали NSDateFormatter перед выполнением даты строковых преобразований, как так Try:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
formatter.locale = [NSLocale currentLocale]; 
Смежные вопросы