Проблемы с печатью NSDate вернулись из форматера - PullRequest
0 голосов
/ 27 июня 2011

Я хочу посмотреть, что хранится в NSDate, поэтому я использую NSLog, но он показывает (null), тогда как, если я печатаю строку stf2, он показывает правильное значение.

           NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
           [formatter setDateFormat:@"YYYY-MM-dd"];

            NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"MMM dd, yyyy"];

    NSString *stf2 = [[pact.date componentsSeparatedByString:@" "] objectAtIndex:0];
            NSLog(@"date %@",stf2);

            NSDate *date_ = [formatter dateFromString:stf2];
            pact.date = [formatter1 stringFromDate:date_];
            NSLog(@"date %@",[NSDate date_]);

Ответы [ 4 ]

2 голосов
/ 27 июня 2011

В коде, представленном в вопросе, есть две конкретные проблемы.

Сброс формата

Сначала,

[formatter setDateFormat:@"YYYY-MM-dd"];

и затем вы инициализируете второй форматер с последующим сбросом формата первого форматера,

NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy"];

Чтобы подчеркнуть

[formatter setDateFormat:@"MMM dd, yyyy"];

Это должно было быть formatter1, но formatter.

Формат даты

Если вы посмотрите на формат, который вы используете YYYY-MM-dd, он выглядит хорошо. Но очевидные YYYY имеют другое назначение и могут отличаться от нашего обычного календарного года. Вместо этого вы должны использовать строчные буквы y.

[formatter setDateFormat:@"yyyy-MM-dd"];

И я не думаю, что вы имели в виду, но

NSLog(@"date %@",[NSDate date_]);

должно быть

NSLog(@"date %@", date_);
1 голос
/ 27 июня 2011

Вам необходимо исправить форматер даты, установив правильный форматер даты.сначала сделайте это

[formatter setDateFormat:@"yyyy-dd-MM"];

// это должно быть так, как ваша строка.например, если ваша строка 2011-Jun- 27, тогда fromatter должен быть

[formatter setDateFormat:@"yyyy-MM-dd"]; 

установить форматер в соответствии с форматом даты вашей строки.затем верните дату из этой строки

NSDate *date_ = [formatter dateFromString:stf2];
0 голосов
/ 27 июня 2011

Ниже вам пригодятся функции.

"getDateTimeFromString" будет принимать дату и время в качестве аргумента и будет возвращать объект NSDate. \

-(NSDate *)getDateTimeFromString :(NSString *)tempDate :(NSString *)tempTime{

NSString *dateValue = [tempDate stringByAppendingFormat:@" %@",tempTime];

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];

NSDate *date = [[NSDate alloc] init];
date = [dateFormatter dateFromString:dateValue];

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

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

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

return date;
}

"getDateStringFromDate" будет принимать NSDateв качестве аргумента, и он вернет NSString.Таким образом, вы можете NSLog это значение.

-(NSString *)getDateStringFromDate :(NSDate *)dateValue{

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setTimeStyle:NSDateFormatterShortStyle];

[timeFormat setDateFormat:@"HH:mm a"];  

 NSString *theDate = [dateFormat stringFromDate:dateValue];

 /*NSLog(@"\n"        
 "theDate: |%@| \n"
 "theTime: |%@| \n"
 , theDate, theTime);*/

return theDate;
}

Надеюсь, вы получите ответ.

0 голосов
/ 27 июня 2011

Если предположить, что "stf2" - ваша строка, то, возможно, ваш объект formatter равен nil.

...