在我的iPhone應用程序中,我希望能夠確定用戶的區域設置的日期格式是月/日(即1月5日的1/5)還是日/月(即1月5日的5/1)。我有一個自定義NSDateFormatter
,它不使用基本格式之一,如NSDateFormatterShortStyle
(11/23/37)。如何確定區域設置的日期格式是月/日還是日/月?
在一個理想的世界,我想用NSDateFormatterShortStyle,但只是沒有顯示年份(僅一個月&日#)。什麼是實現這一目標的最佳方式?
在我的iPhone應用程序中,我希望能夠確定用戶的區域設置的日期格式是月/日(即1月5日的1/5)還是日/月(即1月5日的5/1)。我有一個自定義NSDateFormatter
,它不使用基本格式之一,如NSDateFormatterShortStyle
(11/23/37)。如何確定區域設置的日期格式是月/日還是日/月?
在一個理想的世界,我想用NSDateFormatterShortStyle,但只是沒有顯示年份(僅一個月&日#)。什麼是實現這一目標的最佳方式?
您想使用NSDateFormatter的+ dateFormatFromTemplate:選項:區域:
下面是一些蘋果的示例代碼:
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSLocale *gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
NSString *dateFormat;
NSString *dateComponents = @"yMMMMd";
dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:usLocale];
NSLog(@"Date format for %@: %@",
[usLocale displayNameForKey:NSLocaleIdentifier value:[usLocale localeIdentifier]], dateFormat);
dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:gbLocale];
NSLog(@"Date format for %@: %@",
[gbLocale displayNameForKey:NSLocaleIdentifier value:[gbLocale localeIdentifier]], dateFormat);
// Output:
// Date format for English (United States): MMMM d, y
// Date format for English (United Kingdom): d MMMM y
大廈的示例代碼,這裏是一個一行,以確定當前locale是一天一(注:我放棄了「Y」爲不引起我們的關注了這個問題。):
BOOL dayFirst = [[NSDateFormatter dateFormatFromTemplate:@"MMMMd" options:0 locale:[NSLocale currentLocale]] hasPrefix:@"d"];
。 dateFormatFromTemplate
的文檔聲明「返回的字符串可能不完全包含模板中給出的那些組件,但可能 - 例如 - 應用了特定於區域的調整。」鑑於此,有時由於未知格式的原因,測試可能會返回FALSE(這意味着默認情況下,在默認情況下默認爲月份優先)。自己決定使用哪種默認設置,或者是否需要增強測試以支持其他語言環境。
謝謝!這正是我所期待的。 – Jason 2011-02-27 23:18:55