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];
이것이 방법입니까? 약간 장황한 것 같습니다.
답변
또 다른 옵션은 monthSymbols 메소드를 사용하는 것입니다.
int monthNumber = 11; //November
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];
monthSymbols는 0부터 시작하므로 1..12 monthNumber에서 1을 빼야합니다.
답변
스위프트 2.0
let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]
스위프트 4.0
let monthName = DateFormatter().monthSymbols[monthNumber - 1]
답변
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
도움이 되었기를 바랍니다
답변
이를위한 최상의 솔루션은, standaloneMonthSymbols
방법,
-(NSString*)MonthNameString:(int)monthNumber
{
NSDateFormatter *formate = [NSDateFormatter new];
NSArray *monthNames = [formate standaloneMonthSymbols];
NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)];
return monthName;
}
답변
어때 :
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];
답변
Anna Karenina와 Carl의 두 답변은 일부 문화권에 대해 nominativ에서 월 이름을 반환하지 않기 때문에 잘 작동하지 않습니다. 나는 (대체하여이 문제를 해결 파스칼에서 제안 된 솔루션을 사용하는 것이 좋습니다 monthSymbols
로를 standaloneMonthSymbols
)
답변
Swift 3.0에서
let monthNumber = 3
let fmt = DateFormatter()
fmt.dateFormat = "MM"
let month = fmt.monthSymbols[monthNumber - 1]
print(month)
// result
"March\n"