我知道NSDateformatter功能套件对人类来说是一个福音,但同时它对我来说非常困惑。我希望你能帮助我。
在我的代码中,有一个代表一个月的int。所以:1将是1月,2月2日等等。
在我的用户界面中,我想将此整数显示为正确的月份名称。此外,它应该遵守设备的区域设置。
感谢您的见解
与此同时,我做了以下工作:
int monthNumber = 11
NSString * dateString = [NSString stringWithFormat: @"%d", monthNumber];
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM"];
NSDate* myDate = [dateFormatter dateFromString:dateString];
[dateFormatter release];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM"];
NSString *stringFromDate = [formatter stringFromDate:myDate];
[formatter release];
是这样做的吗?这似乎有点罗嗦。
答案 0 :(得分:152)
另一种选择是使用monthSymbols方法:
int monthNumber = 11; //November
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];
请注意,由于monthSymbols从零开始,因此您需要从1。12个月的数字中减去1。
答案 1 :(得分:24)
您可以更改NSDateFormatter的dateFormat。所以为了简化你的代码:
int monthNumber = 11
NSString * dateString = [NSString stringWithFormat: @"%d", monthNumber];
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM"];
NSDate* myDate = [dateFormatter dateFromString:dateString];
[formatter setDateFormat:@"MMMM"];
NSString *stringFromDate = [formatter stringFromDate:myDate];
[dateFormatter release];
一旦初始化日期格式化程序,您还应该设置语言环境。
dateFormatter.locale = [NSLocale currentLocale]; // Or any other locale
希望这有帮助
答案 2 :(得分:22)
Swift 2.0
let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]
Swift 4.0
let monthName = DateFormatter().monthSymbols[monthNumber - 1]
答案 3 :(得分:13)
最佳解决方案是standaloneMonthSymbols
方法,
-(NSString*)MonthNameString:(int)monthNumber
{
NSDateFormatter *formate = [NSDateFormatter new];
NSArray *monthNames = [formate standaloneMonthSymbols];
NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)];
return monthName;
}
答案 4 :(得分:10)
怎么样:
NSUInteger i = <your month integer>;
NSDateFormatter *df = [NSDateFormatter new];
// change locale if the standard is not what you want
NSArray *monthNames = [df standaloneMonthSymbols];
NSString *monthName = [monthNames objectAtIndex:(i - 1)];
[df release];
答案 5 :(得分:8)
安娜卡列尼娜和卡尔的答案都不能很好地发挥作用,因为他们不会在某些文化的名义上返回月份名称。我建议使用Pascal提出的解决方案,它解决了这个问题(将monthSymbols
替换为standaloneMonthSymbols
)
答案 6 :(得分:5)
在Swift 3.0中
let monthNumber = 3
let fmt = DateFormatter()
fmt.dateFormat = "MM"
let month = fmt.monthSymbols[monthNumber - 1]
print(month)
// result
"March\n"
答案 7 :(得分:3)
NSDate到NSString - &gt;作为Dateformat Ex: 2015/06/24
NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
[dateformate setDateFormat: @"yyyy/MM/dd"];
NSString *date = [dateformate stringFromDate:selectedDate]; // Convert date to string
NSDate到NSString - &gt;作为Dateformat Ex: 2015年6月24日,下午1:02
[dateformate setDateFormat:@"yyyy MMMM dd, h:mm a"];
NSString *displayDate = [dateformate stringFromDate:selectedDate]; // Convert date to string
NSLog(@"date :%@",date);
NSLog(@"Display time = %@", displayDate);
答案 8 :(得分:3)
Swift 4.X
print((DateFormatter().monthSymbols[month-1].capitalized)) //month is int less than 12
例如:
print((DateFormatter().monthSymbols[11-1].capitalized))
<强>输出强>
十一月
答案 9 :(得分:2)
使用ARC:
+ (NSString *)monthNameFromDate:(NSDate *)date {
if (!date) return @"n/a";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM"];
return [[df monthSymbols] objectAtIndex:([[df stringFromDate:date] integerValue] - 1)];
}
答案 10 :(得分:0)
你应该能够摆脱dateFormatter的释放和重新分配,删除几行,但这就是我所看到的。