iOS: Bagaimana cara mendapatkan nama Bulan yang tepat dari sebuah angka?


86

Saya tahu bahwa rangkaian fungsionalitas formatter NSDate adalah anugerah bagi umat manusia, tetapi pada saat yang sama juga sangat membingungkan saya. Saya harap Anda dapat membantu saya.

Di suatu tempat di kode saya, ada int yang mewakili satu bulan. Jadi: 1 Januari, 2 Februari, dll.

Di antarmuka pengguna saya, saya ingin menampilkan integer ini sebagai nama bulan yang sesuai. Selain itu, itu harus mematuhi lokal perangkat.

Terima kasih atas pemaparan anda

Sementara itu, saya telah melakukan hal berikut:

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

apakah ini cara untuk melakukannya? Sepertinya agak bertele-tele.


1
Anda dapat mengganti MMMM dengan LLLL
Peter Stajger

Jawaban:


162

Opsi lainnya adalah menggunakan metode monthSymbols:

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

Perhatikan bahwa Anda harus mengurangi 1 dari 1..12 monthNumber karena monthSymbols berbasis nol.



14
Ini sebenarnya hanya berfungsi dengan bahasa Inggris lokal (dan bahasa serupa). Ini tidak bekerja dengan lokal untuk bahasa yang menggunakan kasus, misalnya bahasa Slavia. standaloneMonthSymbolsharus digunakan.
Sulthan

5
Penyederhanaan:NSString *monthName = [[[NSDateFormatter alloc] init] monthSymbols][monthNumber-1];
Johannes Fahrenkrug

7
Silakan, gunakan standaloneMonthSymbols
Roman Truba

1
Gunakan [df shortMonthSymbols]jika Anda ingin nama bulan pendek (Jan, Feb ...).
Shobhit C

36

Swift 2.0

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

Swift 4.0.0

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

24

Anda dapat mengubah dateFormat dari NSDateFormatter. Jadi untuk menyederhanakan kode Anda:

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

Anda juga harus menyetel lokal setelah Anda memasukkan formatter tanggal.

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

Semoga ini membantu


13

Solusi terbaik untuk ini adalah, standaloneMonthSymbolsmetode,

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

    NSArray *monthNames = [formate standaloneMonthSymbols];

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

    return monthName;
}

10

Bagaimana tentang:

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

Kedua jawaban dari Anna Karenina dan Carl tidak berfungsi dengan baik karena mereka tidak akan mengembalikan nama bulan dalam nominativ untuk beberapa budaya. Saya menyarankan untuk menggunakan solusi yang diusulkan dari Pascal, yang memecahkan masalah ini (dengan menggantinya monthSymbolsdengan standaloneMonthSymbols)


7

Di Swift 3.0

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

    // result
   "March\n"        

3
Lebih baik digunakan standaloneMonthSymbolsuntuk kasus yang benar dalam beberapa bahasa
Gleb Tarasov

6

Swift 4.X.

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

Sebagai contoh:

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

Keluaran

November


3

NSDate to NSString -> As Dateformat Contoh: 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 Contoh: 2015 24 Juni, 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

Dan dengan 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

Anda seharusnya bisa menyingkirkan rilis dan alokasi ulang dateFormatter, memotong beberapa baris, tapi hanya itu yang saya lihat.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.