Как преобразовать строку даты в строку (гггг-ММ-дд). При этом я получаю нулевые значения? - PullRequest
2 голосов
/ 30 апреля 2010

У меня есть данные как customerFromDate "01 апреля 2010" и customerToDate "30 апреля 2010", которые представляют собой строку.

Я хочу преобразовать этот формат в строку "yyyy-MM-dd", но при этом я получил нулевые значения. Пожалуйста, посмотрите следующий код, который я пробовал.

printf("\n customerFromDate %s",[customerStatementObj.customerFromDate UTF8String]);
printf("\n customerToDate %s",[customerStatementObj.customerToDate UTF8String]);
/*
 prints as the following 
 customerFromDate 01 Apr 2010
 customerToDate 30 Apr 2010
 */

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *fromDate=[[NSDate alloc]init];
fromDate = [dateFormatter dateFromString:customerStatementObj.customerFromDate];
printf("\n fromDate: %s",[fromDate.description UTF8String]);
NSString *fromDateString=[dateFormatter stringFromDate:fromDate];
printf("\n fromDateString: %s",[fromDateString UTF8String]);    
[dateFormatter release];

NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc]init];
[dateFormatter1 setDateFormat:@"yyyy-MM-dd"];
NSDate *toDate=[[NSDate alloc]init];
toDate = [dateFormatter1 dateFromString:customerStatementObj.customerToDate];
printf("\n toDate: %s",[toDate.description UTF8String]);
NSString *toDateString=[dateFormatter1 stringFromDate:toDate];
printf("\n toDateString: %s",[toDateString UTF8String]);            
[dateFormatter1 release];

Спасибо, Мадан Мохан.

1 Ответ

4 голосов
/ 30 апреля 2010

Несколько заметок:

Вам нужны два разных NSDateFormatters. Тот, который определяет формат входной даты, и тот, который определяет формат выходной даты.

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

Вы можете повторно использовать эти форматеры как для fromDate, так и для toDate.

Во-вторых, dateFromString: возвращает выделенный, автоматически выпущенный объект NSDate. Вы пропускаете те, которые вы выделяете вручную.

#import <Cocoa/Cocoa.h>

int main (int argc, char const *argv[])
{
    NSAutoreleasePool *pool = [NSAutoreleasePool new];

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

    NSDate *fromDate = [inputFormatter dateFromString:@"01 Apr 2010"];
    NSDate *toDate = [inputFormatter dateFromString:@"30 Apr 2010"];

    printf("\n fromDate: %s",[fromDate.description UTF8String]);
    NSString *fromDateString=[outputFormatter stringFromDate:fromDate];
    printf("\n fromDateString: %s",[fromDateString UTF8String]);

    printf("\n toDate: %s",[toDate.description UTF8String]);
    NSString *toDateString=[outputFormatter stringFromDate:toDate];
    printf("\n toDateString: %s",[toDateString UTF8String]);

    [inputFormatter release];
    [outputFormatter release];

    [pool drain];
    return 0;
}
...