Iphone 如何确定区域设置';s日期格式是月/日还是日/月?

Iphone 如何确定区域设置';s日期格式是月/日还是日/月?,iphone,ios,internationalization,nsdate,nsdateformatter,Iphone,Ios,Internationalization,Nsdate,Nsdateformatter,在我的iPhone应用程序中,我希望能够确定用户的区域设置的日期格式是月/日(即1月5日的1/5)还是日/月(即1月5日的5/1)。我有一个自定义的NSDateFormatter,它不使用基本格式之一,例如NSDateFormatterShortStyle(11/23/37) 在理想情况下,我希望使用NSDateFormatterShortStyle,但不显示年份(仅显示月份和日期)。实现这一点的最佳方法是什么?您想使用NSDateFormatter的+dateFormatFromTemplat

在我的iPhone应用程序中,我希望能够确定用户的区域设置的日期格式是月/日(即1月5日的1/5)还是日/月(即1月5日的5/1)。我有一个自定义的
NSDateFormatter
,它不使用基本格式之一,例如
NSDateFormatterShortStyle
(11/23/37)


在理想情况下,我希望使用NSDateFormatterShortStyle,但不显示年份(仅显示月份和日期)。实现这一点的最佳方法是什么?

您想使用NSDateFormatter的+dateFormatFromTemplate:options:locale:

以下是一些苹果示例代码:

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

在示例代码的基础上,这里有一行代码来确定当前区域设置是否为第一天(注意,我去掉了“y”,因为这与我们的问题无关):



注意。
dateFormatFromTemplate
的文档声明“返回的字符串可能不完全包含模板中给定的组件,但可能应用了特定于区域设置的调整。”鉴于此,有时测试可能会由于未知格式而返回FALSE(表示不清楚时默认为月初)。自行决定您喜欢哪种默认设置,或者是否需要增强测试以支持其他地区。

谢谢!这正是我想要的。
BOOL dayFirst = [[NSDateFormatter dateFormatFromTemplate:@"MMMMd" options:0 locale:[NSLocale currentLocale]] hasPrefix:@"d"];