2010-05-10 34 views
1

我知道SQLite不支持日期名稱和月份名稱。我已經通過this的問題。我爲它創建了兩個自定義函數。如何在iPhone中格式化SQLite日期?

我從天數轉換國慶節的名稱自定義函數:

(%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沒有本地日期/時間數據類型,但通常將日期存儲爲格式爲YYYY-MM-DD HH:MM:SS的ISO8601字符串或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

嗯。我想你錯過了什麼。 2月6日星期六 - > 2月6日星期六。同樣在2月2日週六。 – 2010-05-10 07:32:51

+0

據我所知,你必須自己做。普通話(6次而不是6次,2次而不是2次)在不同語言之間差異很大,並且在大多數編程語言中不直接支持。如果可能,*不要*指定輸出格式,而是允許系統使用其默認輸出格式,這將由用戶的區域設置確定。 – Nate 2010-05-10 07:49:00

1

爲什麼不使用formattion capabilities的客戶端代碼,或者ojective-c不包含strftime?

+0

它可用於iPhone應用程序開發嗎?因爲它似乎是osx庫。 – 2010-05-10 07:16:00

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

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