2012-03-12 129 views
13

我有這個代碼,我試圖獲取當前日期並在當前區域設置格式。如何格式化用戶語言環境的當前日期?

NSDate *now = [NSDate date]; // gets current date 
NSString *sNow = [[NSString alloc] initWithFormat:@"%@",now]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"mm-dd-yyyy"]; 
insertCmd = [insertCmd stringByAppendingString: formatter setDateFormat: @"MM.dd.yyyy"]; 

我知道最後一行是錯誤的,但似乎無法推測出來......「insertCmd」是我建立了FMDB命令的NSString。

幫助將不勝感激,或一個指針,其中它的所述的「文檔」。

回答

29

在這種情況下,我不會使用setDateFormat,因爲它將日期格式化程序限制爲特定的日期格式(doh!) - 您需要動態格式,具體取決於用戶的語言環境。

NSDateFormatter爲您提供了一套內置的日期/時間風格,你可以選擇,即NSDateFormatterMediumStyle,NSDateFormatterShortStyle等。

所以,你應該做的是:

NSDate* now = [NSDate date]; 
NSDateFormatter* df = [[NSDateFormatter alloc] init]; 
[df setDateStyle:NSDateFormatterMediumStyle]; 
[df setTimeStyle:NSDateFormatterShortStyle]; 
NSString* myString = [df stringFromDate:now]; 

這將爲您提供一箇中等長度的日期和短的時間長度的字符串,這完全取決於用戶的語言環境。嘗試設置並選擇你喜歡的任何一個。

這裏的可用樣式列表:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/c/tdef/NSDateFormatterStyle

3

如果你想本地化的日期和時間,這將提供給你:

NSString *localizedDateTime = [NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle]; 

上面的代碼不給你本地化的日期和時間。

5

除了jiayow的回答,您可以指定您的自定義 '模板',以獲得本地化的版本:

+ (NSString *)formattedDate:(NSDate *)date usingTemplate:(NSString *)template { 
    NSDateFormatter* formatter = [NSDateFormatter new]; 

    formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:template options:0 locale:formatter.locale]; 

    return [formatter stringFromDate:date]; 
} 

用法示例美國/ DE區域:

NSLocale *enLocale = [NSLocale localeWithLocaleIdentifier:@"en_US"]; 
NSLocale *deLocale = [NSLocale localeWithLocaleIdentifier:@"de"]; 

// en_US: MMM dd, yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddMMMyyyy" options:0 locale:enLocale]; 
// de:  dd. MMM yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddMMMyyyy" options:0 locale:deLocale]; 

// en_US: MM/dd/yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddyyyyMM" options:0 locale:enLocale]; 
// de:  dd.MM.yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddyyyyMM" options:0 locale:deLocale]; 

// en_US MM/dd 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"MMdd" options:0 locale:enLocale]; 
// de:  dd.MM. 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"MMdd" options:0 locale:deLocale]; 
相關問題