iOS: Làm thế nào để lấy tên Tháng thích hợp từ một số?


86

Tôi biết rằng bộ chức năng NSDateformatter là một lợi ích cho nhân loại, nhưng đồng thời nó cũng rất khó hiểu đối với tôi. Tôi hi vọng bạn có thể giúp tôi vượt qua.

Ở đâu đó trong mã của tôi, có một int đại diện cho một tháng. Vì vậy: 1 sẽ là tháng 1, 2 tháng 2, v.v.

Trong giao diện người dùng của mình, tôi muốn hiển thị số nguyên này dưới dạng tên tháng thích hợp. Hơn nữa, nó phải tuân theo ngôn ngữ của thiết bị.

Cảm ơn bạn đã hiểu biết của bạn

Trong thời gian này, tôi đã làm như sau:

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

đây có phải là cách để làm điều đó? Nó có vẻ hơi dài dòng.


1
bạn có thể thay thế MMMM với LLLL
Peter Stajger

Câu trả lời:


162

Một tùy chọn khác là sử dụng phương pháp monthSymbols:

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

Lưu ý rằng bạn sẽ cần trừ 1 cho 1..12 tháng của mình Số kể từ tháng Biểu tượng là số 0.



14
Điều này thực sự chỉ hoạt động với ngôn ngữ tiếng Anh (và các ngôn ngữ tương tự). Nó không hoạt động với các ngôn ngữ sử dụng trường hợp, ví dụ như ngôn ngữ Slavic. standaloneMonthSymbolsphải được sử dụng.
Sulthan

5
Đơn giản hóa:NSString *monthName = [[[NSDateFormatter alloc] init] monthSymbols][monthNumber-1];
Johannes Fahrenkrug

7
Xin vui lòng, sử dụng standaloneMonthSymbols
La Mã truba

1
Sử dụng [df shortMonthSymbols]nếu bạn muốn tên tháng ngắn (tháng 1, tháng 2 ...).
Shobhit C,

36

Swift 2.0

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

Swift 4.0

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

24

Bạn có thể thay đổi dateFormat của NSDateFormatter. Vì vậy, để đơn giản hóa mã của bạn:

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

Bạn cũng nên đặt ngôn ngữ sau khi bạn cài đặt bộ định dạng ngày.

dateFormatter.locale = [NSLocale currentLocale]; // Or any other locale

Hi vọng điêu nay co ich


13

Giải pháp tốt nhất cho điều này là, standaloneMonthSymbolsphương pháp,

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

    NSArray *monthNames = [formate standaloneMonthSymbols];

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

    return monthName;
}

10

Làm thế nào về:

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

Cả hai câu trả lời từ Anna Karenina và Carl đều không hoạt động tốt vì họ sẽ không trả lại tên tháng trong đề cử cho một số nền văn hóa. Tôi khuyên bạn nên sử dụng giải pháp được đề xuất từ ​​Pascal, giải pháp giải quyết vấn đề này (bằng cách thay thế monthSymbolsbằng standaloneMonthSymbols)


6

Trong Swift 3.0

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

    // result
   "March\n"        

2
Tốt hơn để sử dụng standaloneMonthSymbolscho trường hợp đúng trong một số ngôn ngữ
Gleb Tarasov

6

Swift 4.X

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

Ví dụ:

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

Đầu ra

Tháng mười một


3

NSDate thành NSString -> As 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 thành NSString -> As Dateformat Ví dụ: 2015 ngày 24 tháng 6, 1:02 chiều

        [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

Và với 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

Bạn sẽ có thể loại bỏ việc phát hành và phân bổ lại dateFormatter, cắt bỏ một vài dòng, nhưng đó là tất cả những gì tôi thấy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.