iOS: Bir numaradan uygun bir Ay adı nasıl alınır?


86

NSDateformatter işlevsellik paketinin insanlık için bir nimet olduğunu biliyorum, ancak aynı zamanda benim için çok kafa karıştırıcı. Umarım bana yardım edebilirsin.

Kodumun bir yerinde, bir ayı temsil eden bir int var. Yani: 1 Ocak, 2 Şubat vb. Olacaktır.

Kullanıcı arayüzümde bu tamsayıyı uygun ay adı olarak göstermek istiyorum. Ayrıca, cihazın bulunduğu yere uymalıdır.

Anlayışınız için teşekkürler

Bu arada ben şunları yaptım:

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

bunu yapmanın yolu bu mu? Biraz kelime gibi görünüyor.


1

Yanıtlar:


162

Diğer bir seçenek de monthSymbols yöntemini kullanmaktır:

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

MonthSymbols sıfır tabanlı olduğundan 1..12 monthNumber'ınızdan 1 çıkarmanız gerektiğini unutmayın.



14
Bu aslında yalnızca İngilizce yerel ayarı (ve benzer diller) ile çalışır. Slav dilleri gibi durumları kullanan diller için yerel ayarlarla çalışmaz. standaloneMonthSymbolskullanılmalıdır.
Sulthan

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

7
Lütfen bağımsız
MonthSymbols

1
[df shortMonthSymbols]Kısa ay isimleri (Jan, Feb ...) istiyorsanız kullanın .
Shobhit C

36

Swift 2.0

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

Swift 4.0

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

24

NSDateFormatter'ın dateFormat'ını değiştirebilirsiniz. Dolayısıyla, kodunuzu basitleştirmek için:

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

Tarih biçimlendiriciyi başlattıktan sonra yerel ayarı da ayarlamalısınız.

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

Bu yardımcı olur umarım


13

Bunun için en iyi çözüm standaloneMonthSymbolsyöntem,

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

    NSArray *monthNames = [formate standaloneMonthSymbols];

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

    return monthName;
}

10

Peki ya:

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 ve Carl'ın her iki yanıtı da pek işe yaramıyor, çünkü bazı kültürler için nominativ'de ay adını vermeyecekler. I (değiştirerek bu sorunu çözer Pascal için önerilen bir çözüm, kullanımı önermek monthSymbolsile standaloneMonthSymbols)


7

Swift 3.0'da

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

    // result
   "March\n"        

3
standaloneMonthSymbolsBazı dillerde doğru durum için kullanmak daha
Gleb Tarasov

6

Swift 4.X

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

Örneğin:

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

Çıktı

Kasım


3

NSDate'den NSString'e -> Dateformat Ex: 2015/06/24 olarak

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

NSDate'den NSString'e -> Dateformat Ex: 2015 Haziran 24, 13: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);

1

Ve ARC ile:

+ (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

Birkaç satır keserek dateFormatter'ın yayımlanmasından ve yeniden tahsis edilmesinden kurtulabilmelisiniz, ama tüm gördüğüm bu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.