我想要三个字母格式的月份,但 MMM 在 iOS UIDatePicker 的开头返回带有 "M" 的月份编号
I want month in three alphabet format but MMM is returning month number with "M" at beginning in iOS UIDatePicker
这是我的方法,在选择 UIDatePicker 时间时执行:
-(void) datePickerAction: (UIDatePicker *)sender {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale systemLocale]];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss zzzz yyyy"];
self.dateTextView.text = [dateFormatter stringFromDate:self.datePicker.date];
}
这给我日期 Tue M09 29 10:26:29 GMT+05:30 2015
我希望我的月份以三个字母格式显示,例如 OCT 或 JAN。
令人惊讶的是,如果我注释行 [dateFormatter setLocale:[NSLocale systemLocale]];
那么我会以正确的方式获得月份,因为 Tue Sep 29 10:26:29 Indian Standard Time 2015
具有相同的日期格式化程序。请告诉我哪里错了。
我想要的日期格式示例是 Tue Sep 29 10:26:29 GMT+05:30 2015
MMM
不格式化 3 个字母的缩写。你得到一个缩写,但它是什么取决于语言环境。官方 Unicode 文档有一个带有 4(!) 个字母缩写 ("Sept") 的示例:
http://unicode.org/reports/tr35/tr35-6.html#Date%5FFormat%5FPatterns
因此,您获得的内容取决于语言环境。由于 +systemLocale
交付 "no locale",...
Use the system locale when you don’t want any localizations.
…我想 NSDateFormatter
根本不知道在没有语言环境信息的情况下创建月份缩写。即使这是可能的,也没有意义,因为没有语言环境的本地化形式应该是什么?带有印度缩写的斯瓦希里语月份名称?
您可能想使用 +currentLocale
,这是设备上的用户设置。
最好创建一个函数,这样您就可以轻松访问和访问您必须访问的内容 return。
例如
-(NSString *)getStringFromMonth:(NSString *)strMonth
{
NSInteger monthNum = [strMonth integerValue];
switch (monthNum)
{
case 1:
return @"Jan";
break;
case 2:
return @"Feb";
break;
case 3:
return @"Mar";
break;
case 4:
return @"Apr";
break;
case 5:
return @"May";
break;
case 6:
return @"Jun";
break;
case 7:
return @"Jul";
break;
case 8:
return @"Aug";
break;
case 9:
return @"Sep";
break;
case 10:
return @"Oct";
break;
case 11:
return @"Nov";
break;
case 12:
return @"Dec";
break;
default:
break;
}
return strMonth;
}
阅读 后,我对问题的根本原因一无所知。所以,我实施了一个变通办法,它在我的情况下工作得很好。为了以我想要的格式获取我的日期,我决定使用两个具有不同语言环境的 NSDateFormatter
,然后我从两个格式化程序中附加字符串以获得想要的结果。
为了得到三个字母月份中的月份,我制作了一个 NSDateFormatter
对象
并将它的语言环境设置为 [NSLocale currentLocale]
这给了我三个字母格式的月份名称。
为了获得 GMT,我制作了另一个 NSDateFormtter
对象并将其区域设置为 [NSLocale systemLocale]
,这给了我 GMT 格式。
在此之后,我附加了两个字符串并得到了想要的结果。完整的修改代码如下:
-(void) datePickerAction: (UIDatePicker *)sender {
[self.datePicker setLocale:[NSLocale currentLocale]];
NSDateFormatter *dayMonthDate = [NSDateFormatter new];
[dayMonthDate setLocale:[NSLocale currentLocale]];
[dayMonthDate setDateFormat:@"EEE MMM dd HH:mm:ss"];
NSDateFormatter *gmtAndYearFormatter = [NSDateFormatter new];
[gmtAndYearFormatter setLocale:[NSLocale systemLocale]];
[gmtAndYearFormatter setDateFormat:@"zzzz yyyy"];
self.dateTextView.text = [NSString stringWithFormat:@"%@ %@",
[dayMonthDate stringFromDate:self.datePicker.date],
[gmtAndYearFormatter stringFromDate:self.datePicker.date]];
}
所以,我得到的结果是 Tue Sep 29 11:58:29 GMT+05:30 2015
这是我的方法,在选择 UIDatePicker 时间时执行:
-(void) datePickerAction: (UIDatePicker *)sender {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale systemLocale]];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss zzzz yyyy"];
self.dateTextView.text = [dateFormatter stringFromDate:self.datePicker.date];
}
这给我日期 Tue M09 29 10:26:29 GMT+05:30 2015
我希望我的月份以三个字母格式显示,例如 OCT 或 JAN。
令人惊讶的是,如果我注释行 [dateFormatter setLocale:[NSLocale systemLocale]];
那么我会以正确的方式获得月份,因为 Tue Sep 29 10:26:29 Indian Standard Time 2015
具有相同的日期格式化程序。请告诉我哪里错了。
我想要的日期格式示例是 Tue Sep 29 10:26:29 GMT+05:30 2015
MMM
不格式化 3 个字母的缩写。你得到一个缩写,但它是什么取决于语言环境。官方 Unicode 文档有一个带有 4(!) 个字母缩写 ("Sept") 的示例:
http://unicode.org/reports/tr35/tr35-6.html#Date%5FFormat%5FPatterns
因此,您获得的内容取决于语言环境。由于 +systemLocale
交付 "no locale",...
Use the system locale when you don’t want any localizations.
…我想 NSDateFormatter
根本不知道在没有语言环境信息的情况下创建月份缩写。即使这是可能的,也没有意义,因为没有语言环境的本地化形式应该是什么?带有印度缩写的斯瓦希里语月份名称?
您可能想使用 +currentLocale
,这是设备上的用户设置。
最好创建一个函数,这样您就可以轻松访问和访问您必须访问的内容 return。
例如
-(NSString *)getStringFromMonth:(NSString *)strMonth
{
NSInteger monthNum = [strMonth integerValue];
switch (monthNum)
{
case 1:
return @"Jan";
break;
case 2:
return @"Feb";
break;
case 3:
return @"Mar";
break;
case 4:
return @"Apr";
break;
case 5:
return @"May";
break;
case 6:
return @"Jun";
break;
case 7:
return @"Jul";
break;
case 8:
return @"Aug";
break;
case 9:
return @"Sep";
break;
case 10:
return @"Oct";
break;
case 11:
return @"Nov";
break;
case 12:
return @"Dec";
break;
default:
break;
}
return strMonth;
}
阅读 NSDateFormatter
,然后我从两个格式化程序中附加字符串以获得想要的结果。
为了得到三个字母月份中的月份,我制作了一个 NSDateFormatter
对象
并将它的语言环境设置为 [NSLocale currentLocale]
这给了我三个字母格式的月份名称。
为了获得 GMT,我制作了另一个 NSDateFormtter
对象并将其区域设置为 [NSLocale systemLocale]
,这给了我 GMT 格式。
在此之后,我附加了两个字符串并得到了想要的结果。完整的修改代码如下:
-(void) datePickerAction: (UIDatePicker *)sender {
[self.datePicker setLocale:[NSLocale currentLocale]];
NSDateFormatter *dayMonthDate = [NSDateFormatter new];
[dayMonthDate setLocale:[NSLocale currentLocale]];
[dayMonthDate setDateFormat:@"EEE MMM dd HH:mm:ss"];
NSDateFormatter *gmtAndYearFormatter = [NSDateFormatter new];
[gmtAndYearFormatter setLocale:[NSLocale systemLocale]];
[gmtAndYearFormatter setDateFormat:@"zzzz yyyy"];
self.dateTextView.text = [NSString stringWithFormat:@"%@ %@",
[dayMonthDate stringFromDate:self.datePicker.date],
[gmtAndYearFormatter stringFromDate:self.datePicker.date]];
}
所以,我得到的结果是 Tue Sep 29 11:58:29 GMT+05:30 2015