iOS : 숫자에서 적절한 월 이름을 얻는 방법은 무엇입니까?


86

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];

이것이 방법입니까? 약간 장황한 것 같습니다.


1
당신은 LLLL에 MMMM을 대체 할 수
피터 Stajger에게

답변:


162

또 다른 옵션은 monthSymbols 메소드를 사용하는 것입니다.

int monthNumber = 11;   //November
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];

monthSymbols는 0부터 시작하므로 1..12 monthNumber에서 1을 빼야합니다.



14
이것은 실제로 영어 로케일 (및 유사한 언어)에서만 작동합니다. 예를 들어 슬라브어와 같이 사례를 사용하는 언어에 대해서는 로케일에서 작동하지 않습니다. standaloneMonthSymbols사용해야합니다.
Sulthan

5
단순화 :NSString *monthName = [[[NSDateFormatter alloc] init] monthSymbols][monthNumber-1];
Johannes Fahrenkrug 2013-06-04

7
, standaloneMonthSymbols을 사용하십시오
로마 Truba

1
[df shortMonthSymbols]짧은 월 이름 (Jan, Feb ...)을 원하는 경우 사용 합니다.
Shobhit C

36

스위프트 2.0

let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]

스위프트 4.0

let monthName = DateFormatter().monthSymbols[monthNumber - 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

도움이 되었기를 바랍니다


13

이를위한 최상의 솔루션은, standaloneMonthSymbols방법,

-(NSString*)MonthNameString:(int)monthNumber
{
    NSDateFormatter *formate = [NSDateFormatter new];

    NSArray *monthNames = [formate standaloneMonthSymbols];

    NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)];

    return monthName;
}

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];

8

Anna Karenina와 Carl의 두 답변은 일부 문화권에 대해 nominativ에서 월 이름을 반환하지 않기 때문에 잘 작동하지 않습니다. 나는 (대체하여이 문제를 해결 파스칼에서 제안 된 솔루션을 사용하는 것이 좋습니다 monthSymbols로를 standaloneMonthSymbols)


7

Swift 3.0에서

    let monthNumber = 3
    let fmt = DateFormatter()
    fmt.dateFormat = "MM"
    let month = fmt.monthSymbols[monthNumber - 1]
    print(month)

    // result
   "March\n"        

3
더 나은 사용하는 standaloneMonthSymbols일부 언어에서 정확한 경우에
에 Gleb Tarasov에게

6

스위프트 4.X

print((DateFormatter().monthSymbols[month-1].capitalized)) //month is int less than 12

예를 들면 :

print((DateFormatter().monthSymbols[11-1].capitalized))

산출

십일월


3

NSDate to NSString- > As Dateformat 예 : 2015/06/24

        NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
        [dateformate setDateFormat: @"yyyy/MM/dd"];
        NSString *date = [dateformate stringFromDate:selectedDate]; // Convert date to string

NSDate to NSString- > As Dateformat Ex : 2015 June 24, 1:02 PM

        [dateformate setDateFormat:@"yyyy MMMM dd, h:mm a"];
        NSString *displayDate = [dateformate stringFromDate:selectedDate]; // Convert date to string
        NSLog(@"date :%@",date);
        NSLog(@"Display time = %@", displayDate);

1

그리고 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)];
}

0

dateFormatter의 릴리스 및 재 할당을 제거하고 몇 줄을 제거 할 수 있어야하지만 그게 전부입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.