2010-01-09 3 views
20

У меня есть строка с форматом даты и времени: «ГГГГ-ММ-ДД ЧЧ: ММ: СС».Как обрабатывать разные форматы времени, используя NSDateFormatter

Я использую это в моем исходном коде:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"%e. %B %Y"]; 
NSString *test = [formatter stringFromDate:@"2010-01-10 13:55:15"]; 

Я хочу, чтобы преобразовать из «2010-01-10 13:55:15» до «10 января 2010». Но моя реализация не работает.

Что здесь не так?

Большое спасибо заранее & С наилучшими пожеланиями.

Обновленный исходный код:

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"%Y-%m-%d %H:%M:%S"]; 
NSString *test1 = [formatter stringFromDate:@"2010-01-10 13:55:15"]; 

NSDateFormatter *formatter1 = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter1 setDateFormat:@"%d. %M4 %Y"]; 
NSString *test2 = [formatter1 stringFromDate:test1]; 
+0

pueden ayudarme жулик Estan Pregunta HTTP: // StackOverflow.ru/questions/15162835/how-to-use-nsdateformatter-to-venezuela gracias – tony

ответ

32

форматирования даты может обрабатывать только один формат одновременно. Вы должны принять этот подход:

NSDateFormatter *f = [[NSDateFormatter alloc] init]; 
[f setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *date = [f dateFromString:@"2010-01-10 13:55:15"]; 

NSDateFormatter *f2 = [[NSDateFormatter alloc] init]; 
[f2 setDateFormat:@"d. MMMM YYYY"]; 
NSString *s = [f2 stringFromDate:date]; 

s теперь будет "10 января 2010"

+3

не забудьте освободить форматировщики – user102008

1

Вы хотите использовать [NSFormatter dateFromString:] для преобразования на основе строки даты к NSDate экземпляра. Оттуда вы хотите использовать stringFromDate с NSDate, а не строку, как вы писали выше. Я не уверен в использовании одного и того же NSDateFormatter для разбора и форматирования - для обработки разных стилей формата вам может понадобиться два отдельных экземпляра.

+0

Вы имеете в виду NSDateFormatter? Я думаю, что эти методы недоступны в iPhone только для Mac OS X. Вы также ссылаетесь на справочную библиотеку Mac OS X. – Tim

+0

Подпрограммы, которые я имею в виду, также доступны для iPhone. Рад, что ты все-таки нашел свой ответ. – fbrereto

2

Прежде всего, убедитесь, что вы настроили поведение на 10,4 - более современное, работает лучше на моем опыте.

[dateTimeFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 

Далее, вы не можете использовать тот же формат для разбора и формат, если у них есть 2 разных представления строки, поэтому использовать 2 форматтеров или изменить формат строки между разбором и затем форматированием.

Кроме того, убедитесь вы считаете параметры форматирования:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1

строчным й день недели, в нижнем регистре d является днем ​​месяца.

За месяц, используйте MMMM, а не Б.

+0

Хм, думаю, я не понимаю «систему». Я обновил свой первый пост. Я не знаю, почему это не сработает. – Tim

+0

Если бы опечатка - по M4, я имел в виду 4 Ms, как в MMMM - кричит. –

+1

setFormatterBehavior: не требуется на iPhone OS, он * только * работает в режиме 10.4+. – benzado

6

Вот несколько примеров работы с форматтерами данных из моего кода. Вы должны иметь возможность взять любую из этих функций и настроить ее для своего формата.

ПРИМЕНЕНИЕ

NSDate *today = [NSDate date]; 
NSDateFormatter *dateFormatter = [Constants getTitleDateFormatter]; 
NSString *dateString = [dateFormatter stringFromDate:today];   
[dateFormatter release]; 

ФУНКЦИИ

+ (NSDateFormatter *) getDateFormatterWithTimeZone { 
    //Returns the following information in the format of the locale: 
    //YYYY-MM-dd HH:mm:ss z (Z is time zone) 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setLocale:[NSLocale currentLocale]]; 
    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterLongStyle]; 
    return dateFormatter; 

}

+ (NSDateFormatter *)dateFormatterWithoutYear { 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""]; 
    NSRange secondSpace; 
    secondSpace.location = format.length-2; 
    secondSpace.length = 1; 
    format = [format stringByReplacingCharactersInRange:secondSpace withString:@""]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 

+ (NSDateFormatter *) dateFormatterMonthDayOnly { 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    format = [format stringByReplacingOccurrencesOfString:@"/yy" withString:@""]; 
    NSRange range; 
    range.location = 0; 
    range.length = 3; 
    format = [format substringWithRange:range]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 

+ (NSDateFormatter *) getTitleDateFormatter { 
    //Returns the following information in the format of the locale: 
    //MM-dd-yyyy hh:mm:ssa 
    NSDateFormatter *dateFormatter = [Constants getDateFormatterWithTimeZone]; 
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
    NSString *format = [dateFormatter dateFormat]; 
    NSRange secondSpace; 
    secondSpace.location = format.length-2; 
    secondSpace.length = 1; 
    format = [format stringByReplacingOccurrencesOfString:@"/" withString:@"-"]; 
    format = [format stringByReplacingCharactersInRange:secondSpace withString:@""]; 
    [dateFormatter setDateFormat:format]; 
    return dateFormatter; 
} 
Смежные вопросы