2010-05-10 11 views
1

Je sais que SQLite ne supporte pas le nom du jour et le nom du mois. Je suis passé par la question this. J'ai créé deux fonctions personnalisées pour cela.Comment formater une date SQLite dans un iPhone?

Ma fonction personnalisée pour la conversion Nom du jour du numéro du jour:

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

code:

+(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" 
     ) 
     ) 
    ) 
    ) 
    ); 
} 

Ma méthode personnalisée pour obtenir le nom du mois de mois aucune chaîne:

(%m month: 01-12) 

code:

+(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" 
      ) 
      ) 
      )    
     ) 
     ) 
     ) 
     ) 
    ) 
    ) 
    ); 
} 

Mais qu'en date de format suivant

Sat 6th February 

Comment obtenir ce genre de production? Dois-je à nouveau créer une fonction personnalisée pour cela?

Répondre

3

Quel est le format de date en êtes-vous de SQLite? SQLite ne dispose pas d'un type de données date/heure d'origine, mais il est courant de stocker une date comme une chaîne ISO8601 de la forme YYYY-MM-DD HH:MM:SS ou un horodatage de style Unix.

Étape 1: Obtenez la date en tant que NSDate. Voici une façon, en utilisant le format ISO8601 mentionné ci-dessus:

// 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]; 

Si votre date a été stockée sous la forme d'un horodatage de style Unix, vous pouvez passer directement à l'aide d'un formatter d'entrée et utiliser NSDate dateWithTimeIntervalSince1970: à la place.

Étape 2: Convertir la date à une chaîne:

// 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]; 

Dans cet exemple, vous obtiendrez une chaîne comme Sat 6 February, en supposant que l'utilisateur se trouve dans un environnement linguistique anglais.

Références:

+0

Hmm. Je pense que vous manquez quelque chose. Samedi 6 février -> Samedi 6 février. De même Sam Samedi 2 février. –

+0

Autant que je sache, vous devriez le faire vous-même. Ordinals (6ème au lieu de 6, 2ème au lieu de 2) varient considérablement entre les langues parlées et ne sont pas directement pris en charge dans la plupart des langages de programmation. Si possible, * ne spécifiez pas le format de sortie et autorisez plutôt le système à utiliser son format de sortie par défaut, qui sera déterminé par les paramètres régionaux de l'utilisateur. – Nate

1

Pourquoi ne pas utiliser formattion capabilities du code client ou ojective-c ne comprend pas strftime?

+0

Sera-t-il disponible pour le développement d'applications iPhone? comme il semble être une bibliothèque osx. –

0

OK. J'ai finalement ajouté quelques méthodes personnalisées pour cela.

+(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"]; 
     } 
    } 
}