2012-04-29 2 views
0

У меня есть дата в формате: Пт июл 16 16:58:46 +0000 2010. Чтобы преобразовать его в Пт Июл 16 2010 Я попытался:Дата выхода на iPhone возвращается (null)

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 

for(int i=0; i<[self.data count]; i++) { 
    id celldata = [self.data objectAtIndex:i]; 
    NSString *str = [NSString stringWithFormat:@"%@", [celldata objectForKey:@"created_at"]]; 
    NSLog(@"date for %u is %@",i, str); //this works and writes the date 
    [df setDateFormat:@"eee MMM dd HH:mm:ss Z yyyy"]; 
    NSDate *date = [df dateFromString:str]; 
    [df setDateFormat:@"eee MMM dd yyyy"]; 
    NSString *dateStr = [df stringFromDate:date]; 
    NSLog(@"%@",dateStr); 
} 

Но NSLog (@ "% @", СТРОКА-ДАТЫ) только пишет (нуль). Как заставить его работать?

EDIT По какой-то причине я получил это работает, изменяя

[ф.р. setDateFormat: @ "эээ МММ дд чч: мм: сс Z гггг"];

к

[DF setDateFormat: @ "МММ ДД ЧЧ: мм: сс Z гггг"];

и удаление недели из моей строки. Однако, спасибо всем.

+1

Это, вероятно, не удалось разобрать строку в вашу переменную 'date'. Попробуйте выполнить 'NSLog (@"% @ ", date)' и посмотреть, нет ли этого. – joerick

+0

@joerick: это nil (null). –

+0

@sch: "** date for 0 is Sun Apr 29 11:11:22 +0000 2012 **" и т. Д. –

ответ

0

Это может немного помочь вам. У меня была аналогичная проблема некоторое время назад, поэтому я создал следующие методы.


Определения

#define DATE_TYPE_hhmmss [NSArray arrayWithObjects:@"h", @"m", @"s", nil] 
#define DATE_TYPE_MMDDYYYY [NSArray arrayWithObjects:@"M", @"D", @"Y", nil] 
#define DATE_TYPE_MMDDYYYYhhmmss [NSArray arrayWithObjects:@"M", @"D", @"Y", @"h", @"m", @"s", nil] 
#define DATE_TYPE_MMDDYYYYWWhhmmss [NSArray arrayWithObjects:@"M", @"D", @"Y", @"W", @"h", @"m", @"s", nil] 
#define DATE_TYPE_MMDDYYYYhhmmssWW [NSArray arrayWithObjects:@"M", @"D", @"Y", @"h", @"m", @"s", @"W", nil] 
#define DATE_TYPE_YYYYMMDD [NSArray arrayWithObjects:@"Y", @"M", @"D", nil] 
#define DATE_TYPE_YYYYMMDDhhmmss [NSArray arrayWithObjects:@"Y", @"M", @"D", @"h", @"m", @"s", nil] 
#define DATE_TYPE_YYYYMMDDWWhhmmss [NSArray arrayWithObjects:@"Y", @"M", @"D", @"W", @"h", @"m", @"s", nil] 
#define DATE_TYPE_YYYYMMDDhhmmssWW [NSArray arrayWithObjects:@"Y", @"M", @"D", @"h", @"m", @"s", @"W", nil] 
#define DATE_TYPE_FRIENDLY [NSArray arrayWithObjects:@"xx", nil] 

Дата Методы

Дата создания От значений

-(NSDate *) getDateWithMonth:(int)month day:(int)day year:(int)year { 
    NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
    NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; 

    [dateFormatter setDateFormat:@"MM"]; 
    [dateComponents setMonth:month]; 
    [dateFormatter setDateFormat:@"DD"]; 
    [dateComponents setDay:day]; 
    [dateFormatter setDateFormat:@"YYYY"]; 
    [dateComponents setYear:year]; 

    NSDate * result = [calendar dateFromComponents:dateComponents]; 

    return result; 
} 

-(NSDate *) getDateWithMonth:(int)month day:(int)day year:(int)year hour:(int)hour minute:(int)minute { 
    NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
    NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[NSDate date]]; 

    [dateFormatter setDateFormat:@"MM"]; 
    [dateComponents setMonth:month]; 
    [dateFormatter setDateFormat:@"DD"]; 
    [dateComponents setDay:day]; 
    [dateFormatter setDateFormat:@"YYYY"]; 
    [dateComponents setYear:year]; 
    [dateFormatter setDateFormat:@"HH"]; 
    [dateComponents setHour:hour]; 
    [dateFormatter setDateFormat:@"MM"]; 
    [dateComponents setMinute:minute]; 

    NSDate * result = [calendar dateFromComponents:dateComponents]; 

    return result; 
} 

-(NSDate *) getDateWithMonth:(int)month day:(int)day year:(int)year hour:(int)hour minute:(int)minute second:(int)second { 
    NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
    NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date]]; 

    [dateFormatter setDateFormat:@"MM"]; 
    [dateComponents setMonth:month]; 
    [dateFormatter setDateFormat:@"DD"]; 
    [dateComponents setDay:day]; 
    [dateFormatter setDateFormat:@"YYYY"]; 
    [dateComponents setYear:year]; 
    [dateFormatter setDateFormat:@"HH"]; 
    [dateComponents setHour:hour]; 
    [dateFormatter setDateFormat:@"MM"]; 
    [dateComponents setMinute:minute]; 
    [dateFormatter setDateFormat:@"SS"]; 
    [dateComponents setSecond:second]; 

    NSDate * result = [calendar dateFromComponents:dateComponents]; 

    return result; 
} 

Получить строку из Дата

-(NSString *) getStringFromDate:(NSDate *)date dateType:(NSArray *)dateType { 
    NSString * result = @""; 

    NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSString * format = @""; 

    NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate:date]; 

    NSInteger year = [dateComponents year]; 
    NSInteger month = [dateComponents month]; 
    NSInteger day = [dateComponents day]; 
    NSInteger weekday = [dateComponents weekday]; 
    NSInteger hour = [dateComponents hour]; 
    NSInteger minute = [dateComponents minute]; 
    NSInteger second = [dateComponents second]; 

    if (dateType != nil) { 
     for (int x = 0; x < [dateType count]; x++) { 
      if (x == ([dateType count]-1)) { 
       if ([[dateType objectAtIndex:x] isEqualToString:@"Y"]) { 
        format = [format stringByAppendingFormat:@"%d", year]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"M"]) { 
        format = [format stringByAppendingFormat:@"%d", month]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"D"]) { 
        format = [format stringByAppendingFormat:@"%d", day]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"W"]) { 
        format = [format stringByAppendingFormat:@"%d", weekday]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"h"]) { 
        format = [format stringByAppendingFormat:@"%d", hour]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"m"]) { 
        format = [format stringByAppendingFormat:@"%d", minute]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"s"]) { 
        format = [format stringByAppendingFormat:@"%d", second]; 
       } 
      } else { 
       if ([[dateType objectAtIndex:x] isEqualToString:@"Y"]) { 
        format = [format stringByAppendingFormat:@"%d|", year]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"M"]) { 
        format = [format stringByAppendingFormat:@"%d|", month]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"D"]) { 
        format = [format stringByAppendingFormat:@"%d|", day]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"W"]) { 
        format = [format stringByAppendingFormat:@"%d|", weekday]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"h"]) { 
        format = [format stringByAppendingFormat:@"%d|", hour]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"m"]) { 
        format = [format stringByAppendingFormat:@"%d|", minute]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"s"]) { 
        format = [format stringByAppendingFormat:@"%d|", second]; 
       } 
      } 

      if ([[dateType objectAtIndex:x] isEqualToString:@"xx"]) { 
       format = [NSString stringWithFormat:@"Year: %d, Month: %d, Day: %d, Weekday: %d, Hour: %d, Minute: %d, Second: %d", year, month, day, weekday, hour, minute, second]; 
      } 
     } 
    } else { 
     format = [format stringByAppendingFormat:@"%d|", year]; 
     format = [format stringByAppendingFormat:@"%d|", month]; 
     format = [format stringByAppendingFormat:@"%d|", day]; 
     format = [format stringByAppendingFormat:@"%d|", weekday]; 
     format = [format stringByAppendingFormat:@"%d|", hour]; 
     format = [format stringByAppendingFormat:@"%d|", minute]; 
     format = [format stringByAppendingFormat:@"%d|", second]; 

     format = [NSString stringWithFormat:@"%d|%d|%d|%d|%d|%d|%d", year, month, day, weekday, hour, minute, second]; 
    } 

    result = format; 

    return result; 
} 

Пример

NSDate * date = [self getDateWithMonth:12 day:24 year:1994]; 
NSString * dateInString = [self getStringFromDate:date dateType:DATE_TYPE_MMDDYYYY]; 

int month = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:0] intValue]; 
int day = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:1] intValue]; 
int year = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:2] intValue]; 

NSLog(@"String of Date: \"%@\"", dateInString); 
NSLog(@"Month: %d", month); 
NSLog(@"Day: %d", day); 
NSLog(@"Year: %d", year); 

Метод [self getDateWithMonth:12 day:24 year:1994] возвращает NSDate объект, который, как правило, трудно читать, так что вы можете использовать [self getStringFromDate:date dateType:DATE_TYPE_MMDDYYYY], чтобы получить строку объект NSDate.

Используйте определения (макросы), чтобы указать формат даты, которую вы хотели бы получить в строке.

Например: DATE_TYPE_hhmmss возвратит Hour|Minute|Second, DATE_TYPE_MMDDYYYY возвратят Month|Day|Year, DATE_TYPE_MMDDYYYYhhmmss возвратят Month|Day|Year|Hour|Minute|Second, DATE_TYPE_MMDDYYYYWWhhmmss вернется Month|Day|Year|Weekday (#)|Hour|Minute|Second

и так далее ...

КОНСОЛЬ Журнал

2012-04-29 13:42:15.791 Atomic Class[1373:f803] String of Date: "12|24|1994" 
2012-04-29 13:42:15.793 Atomic Class[1373:f803] Month: 12 
2012-04-29 13:42:15.794 Atomic Class[1373:f803] Day: 24 
2012-04-29 13:42:15.794 Atomic Class[1373:f803] Year: 1994 
+0

спасибо, это потрясающе, но я уже получил его работу. –

0

Если исходные строки, которые вы обрабатываете по датам, действительно в формате «20081122», то первый вызов «setDateFormat» неверен в обоих фрагментах, так как формат указанного неверен.

Предполагая, что [celldata objectForKey: @ "created_at"] возвращает даты в формате «20081122» на ваш второй фрагмент кода, вам необходимо изменить первый вызов на setDateFormat, чтобы использовать правильный формат для строки », yyyyMMdd "Это приведет к правильному преобразованию, когда вы вызовете метод dateFromString. Затем, когда у вас есть представление объекта NSDate *, вы можете использовать любой формат, который вам нужен, когда вы преобразовываете его обратно в строку через stringFromDate.

NSString *dateStr = @"20081122"; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
//This is the important change here, this format MUST match the format of the string. 
[dateFormat setDateFormat:@"yyyyMMdd"]; 
NSDate *date = [dateFormat dateFromString:dateStr]; 
[dateFormat setDateFormat:@"EEEE MMMM d, YYYY"]; 
dateStr = [dateFormat stringFromDate:date]; 
[dateFormat release]; 
+0

Извините, что в отредактированной части произошла ошибка. Пожалуйста, проигнорируйте это –

0

Использование Dateformatter для недели EEE вместо EEE

[DF setDateFormat: @ "ЕЕЕ МММ ДД ЧЧ: мм: сс Z гггг"];

Я надеюсь, что это будет полезно для вас ...

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