2010-05-10 6 views
1

Я знаю, что SQLite не поддерживает имя дня и имя месяца. Я прошел через вопрос this. Я создал для него две пользовательские функции.Как отформатировать дату SQLite в iPhone?

Моя пользовательская функция для преобразования Именины из числа дней:

(%w day of week 0-6 with sunday==0) 

Код:

+(NSString*)dayNameStringFromDayNo:(NSString*)dayNo{ 
    return 
    ([dayNo isEqualToString:@"0"])[email protected]"Sunday": 
    (([dayNo isEqualToString:@"1"])[email protected]"Monday": 
    (([dayNo isEqualToString:@"2"])[email protected]"Tuesday": 
     (([dayNo isEqualToString:@"3"])[email protected]"Wednesday": 
     (([dayNo isEqualToString:@"4"])[email protected]"Thursday": 
     (([dayNo isEqualToString:@"5"])[email protected]"Friday": @"Saturday" 
     ) 
     ) 
    ) 
    ) 
    ); 
} 

Мой заказ способ не получить название месяца от месяца нет строки:

(%m month: 01-12) 

Код:

+(NSString*)monthNameFromNumber:(NSString*)no{ 
    return ([no isEqualToString:@"01"])[email protected]"January": 
    (([no isEqualToString:@"02"])[email protected]"February": 
    (([no isEqualToString:@"03"])[email protected]"March": 
     (([no isEqualToString:@"04"])[email protected]"April": 
     (([no isEqualToString:@"05"])[email protected]"May": 
     (([no isEqualToString:@"06"])[email protected]"June": 
     (([no isEqualToString:@"07"])[email protected]"July": 
      (([no isEqualToString:@"08"])[email protected]"August": 
      (([no isEqualToString:@"09"])[email protected]"September": 
      (([no isEqualToString:@"10"])[email protected]"October": 
      (([no isEqualToString:@"11"])[email protected]"November":@"Decemeber" 
      ) 
      ) 
      )    
     ) 
     ) 
     ) 
     ) 
    ) 
    ) 
    ); 
} 

Но что о дате следующего формата

Sat 6th February 

Как получить этот вид продукции? Должен ли я снова создать для него настраиваемую функцию?

ответ

3

Какой формат даты вы получаете от SQLite? SQLite не имеет собственного типа данных даты/времени, но обычно хранить дату как строку ISO8601 формы YYYY-MM-DD HH:MM:SS или временную метку стиля Unix.

Шаг 1: Получите дату как NSDate. Вот один из способов, с помощью ISO8601 формата, упомянутого выше:

// Create a date formatter 
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

// Use the formatter to convert the string you retrieved (from 
// SQLite) into an NSDate. 
NSDate *theDate = [inputFormatter dateFromString:yourSQLiteString]; 

// Don't forget to release alloc'ed resources 
[inputFormatter release]; 

Если дата хранится в виде Unix-стиля метки времени, вы можете пропустить с использованием входного форматировщик и использовать NSDate dateWithTimeIntervalSince1970: вместо этого.

Шаг 2: Преобразование даты в строку:

// Create a date formatter for whatever format you want to output, 
// using the formatting patterns from Unicode tr35-6 Appendix F. 
outputFormatter = [[NSDateFormatter alloc] init]; 
[outputFormatter setDateFormat:@"EEE d MMMM"]; 
NSString *dateString = [dateFormatter stringFromDate:theDate]; 

// Don't forget to release alloc'ed resources. 
[outputFormatter release]; 

В этом примере вы получите строку как Sat 6 February, предполагая, что пользователь находится в английской локали.

Ссылки:

+0

Хм. Я думаю, вы что-то упустили. Сб 6 февраля -> Сб 6 февраля. аналогично Сб 2 февраля. –

+0

Насколько я знаю, вам придется сделать это сами. Ординалы (6-й вместо 6, 2-й вместо 2) сильно различаются между разговорными языками и не поддерживаются непосредственно на большинстве языков программирования. Если возможно, * не * укажите формат вывода и вместо этого разрешите системе использовать выходной формат по умолчанию, который будет определяться по языку пользователя. – Nate

1

Почему бы не использовать formattion capabilities кода клиента, или ojective-c не включает strftime?

+0

Будет ли он доступен для разработки приложений для iPhone? поскольку это, кажется, библиотека osx. –

0

OK. Я, наконец, добавил для него некоторые пользовательские методы.

+(NSString*)dayNameStringFromDayNo:(NSString*)dayNo{ 
    return 
    ([dayNo isEqualToString:@"0"])[email protected]"Sunday": 
    (([dayNo isEqualToString:@"1"])[email protected]"Monday": 
    (([dayNo isEqualToString:@"2"])[email protected]"Tuesday": 
     (([dayNo isEqualToString:@"3"])[email protected]"Wednesday": 
     (([dayNo isEqualToString:@"4"])[email protected]"Thursday": 
     (([dayNo isEqualToString:@"5"])[email protected]"Friday": @"Saturday" 
     ) 
     ) 
     ) 
    ) 
    ); 
} 

+(NSString*)dayNameHalfStringFromDayNo:(NSString*)dayNo{ 
    return 
    ([dayNo isEqualToString:@"0"])[email protected]"Sun": 
    (([dayNo isEqualToString:@"1"])[email protected]"Mon": 
    (([dayNo isEqualToString:@"2"])[email protected]"Tues": 
     (([dayNo isEqualToString:@"3"])[email protected]"Wed": 
     (([dayNo isEqualToString:@"4"])[email protected]"Thu": 
     (([dayNo isEqualToString:@"5"])[email protected]"Fri": @"Sat" 
     ) 
     ) 
     ) 
    ) 
    ); 
} 

+(NSString*)monthNameFromNumber:(NSString*)no{ 
    return ([no isEqualToString:@"01"])[email protected]"January": 
    (([no isEqualToString:@"02"])[email protected]"February": 
    (([no isEqualToString:@"03"])[email protected]"March": 
     (([no isEqualToString:@"04"])[email protected]"April": 
     (([no isEqualToString:@"05"])[email protected]"May": 
     (([no isEqualToString:@"06"])[email protected]"June": 
     (([no isEqualToString:@"07"])[email protected]"July": 
      (([no isEqualToString:@"08"])[email protected]"August": 
      (([no isEqualToString:@"09"])[email protected]"September": 
      (([no isEqualToString:@"10"])[email protected]"October": 
      (([no isEqualToString:@"11"])[email protected]"November":@"Decemeber" 
      ) 
      ) 
      )    
      ) 
     ) 
     ) 
     ) 
     ) 
    ) 
    ); 
} 


+(NSString*)monthNameHalfFromNumber:(NSString*)no{ 
    return ([no isEqualToString:@"01"])[email protected]"Jan": 
    (([no isEqualToString:@"02"])[email protected]"Feb": 
    (([no isEqualToString:@"03"])[email protected]"Mar": 
     (([no isEqualToString:@"04"])[email protected]"Apr": 
     (([no isEqualToString:@"05"])[email protected]"May": 
     (([no isEqualToString:@"06"])[email protected]"Jun": 
     (([no isEqualToString:@"07"])[email protected]"Jul": 
      (([no isEqualToString:@"08"])[email protected]"Aug": 
      (([no isEqualToString:@"09"])[email protected]"Sep": 
      (([no isEqualToString:@"10"])[email protected]"Oct": 
      (([no isEqualToString:@"11"])[email protected]"Nov":@"Dec" 
      ) 
      ) 
      )    
      ) 
     ) 
     ) 
     ) 
     ) 
    ) 
    ); 
} 

+(NSString*)suffixNameForNumber:(NSString*)no{ 
    NSInteger noV=[no intValue]; 
    if(noV>=11 && noV<=20){ 
     return [no stringByAppendingString:@"th"]; 
    } else { 
     NSString *l=[no substringFromIndex:1]; 
     if([l isEqualToString:@"1"]){ 
      return [no stringByAppendingString:@"st"]; 
     } else if([l isEqualToString:@"2"]){ 
      return [no stringByAppendingString:@"nd"]; 
     } else if([l isEqualToString:@"3"]){ 
      return [no stringByAppendingString:@"rd"]; 
     } else { 
      return [no stringByAppendingString:@"th"]; 
     } 
    } 
} 
Смежные вопросы