2013-08-20 1 views
0

Пожалуйста, помогите мне решить проблему.Дата возврата с датыFromString метод

(Значения objValidation.aRange.MinimumValue, objValidation.aRange.MaximumValue приходят из веб-сервисов)

(я получаю неправильные даты в firstDate, secondDate.)

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
       [df setDateFormat:@"MM/dd/yyyy"]; 
       [df setTimeZone:[NSTimeZone localTimeZone]]; 
       NSDate *myDate = [df dateFromString:inputString]; 
       [df setDateFormat:@"MM/dd/yyyy"]; 
       NSLog(@"objValidation.aRange.MinimumValue : %@,objValidation.aRange.MaximumValue :%@, inputString : %@",objValidation.aRange.MinimumValue,objValidation.aRange.MaximumValue,inputString); 
       NSDate *firstDate = [df dateFromString:objValidation.aRange.MinimumValue]; 
       NSDate *secondDate = [df dateFromString:objValidation.aRange.MaximumValue]; 
       NSLog(@"myDate : %@,firstDate :%@, secondDate : %@",myDate,firstDate,secondDate); 
       [df release]; 

Выход:

objValidation.aRange.MinimumValue : 8/20/2013 
objValidation.aRange.MaximumValue :12/31/9999 
inputString : 08/22/2013 
myDate : 2013-08-21 18:30:00 +0000 
firstDate :2013-08-19 18:30:00 +0000 
secondDate : 1999-12-30 18:30:00 +0000 
+0

Имейте в виду, что NSLog сбрасывает значения NSDate в UTC, а не в индийское время. –

+0

Выглядит хорошо, учитывая смещение часовой пояс NSLog, которое было опубликовано примерно в 100 раз. –

+0

@MarcusAdams Я попытался удалить эту строку, но не помог. Он работает в iOS 5/5.1, но не в iOS 6/6.1 – Mahesh

ответ

2

Дата перенастроена правильно, но вы не принимаете во внимание часовой пояс.

Все объекты NSDate не имеют часовой пояс. Поэтому, когда вы анализируете дату, будет использоваться системный часовой пояс.

+0

Но то же самое отлично работает в iOS 5/5.1 симуляторах. Он не работает в iOS 6/6.1. – Mahesh

+1

@Mahesh - Тогда реальный вопрос в том, почему он работает в 5? –

+0

@HotLicks Я не уверен, почему он работает в iOS 5. Есть ли у них какая-либо проблема с методом dateFromString? Пожалуйста, дайте мне знать. Благодарю. – Mahesh

-3

Попробуйте этот код:

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"MM/dd/yyyy"]; 
NSDate *date = [df dateFromString:@"8/20/2013"]; 
NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone]; 
NSTimeZone *utcTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; 
NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:date]; 
NSInteger gmtOffset = [utcTimeZone secondsFromGMTForDate:date]; 
NSTimeInterval gmtInterval = currentGMTOffset - gmtOffset; 
NSDate *destinationDate = [[NSDate alloc] initWithTimeInterval:gmtInterval sinceDate:date]; 
NSLog(@"DateString : %@", destinationDate); 

Вы получите точный результат, который вы хотите.

+0

Это не сработало для меня. – Mahesh

+1

Вид глупых (и подверженных ошибкам) ​​использования NSDateFormatter, а затем вручную делает арифметику часовых поясов, просто устанавливая форматтер для желаемого часового пояса. –