2013-05-02 3 views
2

Я протестировал свое приложение с региором формата США, и отображение даты верное. Когда регион изменился в Италию, где я живу, теперь имеет нулевое значение.IOS: NSDateFormatter для региона формата Италия

Мой стартер дата строка: - "2 мая 2013 6:46:33 PM" Дата

Результат правильным является: - "02/05/2013 18:46:33"

Вот мой код:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter setDateFormat:@"MM dd, yyyy hh:mm:ss a"]; 


NSDate *dateFromString; 
dateFromString = [dateFormatter dateFromString:dataStr]; 

[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"]; 
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 


NSString *stringFromDate = [dateFormatter stringFromDate:dateFromString]; 

ответ

2

Если строка стартера May 2, 2013 6:46:33 PM то у вас есть два вопрос:

  1. Вашей формат строка MM dd, yyyy hh:mm:ss a не соответствует вашей строке. Это должно быть MMMM dd, yyyy hh:mm:ss a. Использование MM для числовых месяцев. Используйте MMM для имен сокращенного месяца и используйте MMMM для полных имен месяцев.
  2. В вашей строке даты есть месячные имена на английском языке. Если ваше устройство настроено для Италии, оно не будет правильно анализировать названия месяцев, так как ожидается, что имена месяцев будут на итальянском.

Ваш код должен быть:

NSString *dateStr = @"May 2, 2013 6:46:33 PM"; 
NSDateFormatter *inputDateFormatter = [[NSDateFormatter alloc] init]; 
[inputDateFormatter setDateFormat:@"MMMM dd, yyyy hh:mm:ss a"]; 
[inputDateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 

NSDate *dateFromString = [inputDateFormatter dateFromString:dataStr]; 

NSDateFormatter *outputDateFormatter = [[NSDateFormatter alloc] init]; 
[outputDateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"]; 

NSString *stringFromDate = [outputDateFormatter stringFromDate:dateFromString]; 
+0

Ницца. Спасибо за объяснение –

+0

ЭТО РЕШЕНИЕ. THANKS –

+0

После # 2 в этом сообщении мне помогли, я просто хотел добавить ссылку на [Apple Technical Q & A] (https://developer.apple.com/library/ios/qa/qa1480/_index.html) об этом , Это должно быть необходимо прочитать всем, кто наткнулся на этот вопрос. – greg

0

Используйте это:

NSDate* sourceDate = your_date 
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; 

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; 
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; 
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; 

NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate]; 

Надеется, что это помогает у ОУ.

+0

Конечно, это помогает. Я попробую. Спасибо, босс –

+0

Отметьте это, если оно вам поможет. –

Смежные вопросы