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.
ios
numbers
nsdateformatter
Sjakelien
sumber
sumber
Jawaban:
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.
sumber
standaloneMonthSymbols
harus digunakan.NSString *monthName = [[[NSDateFormatter alloc] init] monthSymbols][monthNumber-1];
[df shortMonthSymbols]
jika Anda ingin nama bulan pendek (Jan, Feb ...).Swift 2.0
let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]
Swift 4.0.0
let monthName = DateFormatter().monthSymbols[monthNumber - 1]
sumber
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
sumber
Solusi terbaik untuk ini adalah,
standaloneMonthSymbols
metode,-(NSString*)MonthNameString:(int)monthNumber { NSDateFormatter *formate = [NSDateFormatter new]; NSArray *monthNames = [formate standaloneMonthSymbols]; NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)]; return monthName; }
sumber
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];
sumber
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
monthSymbols
denganstandaloneMonthSymbols
)sumber
Di Swift 3.0
let monthNumber = 3 let fmt = DateFormatter() fmt.dateFormat = "MM" let month = fmt.monthSymbols[monthNumber - 1] print(month) // result "March\n"
sumber
standaloneMonthSymbols
untuk kasus yang benar dalam beberapa bahasaSwift 4.X.
print((DateFormatter().monthSymbols[month-1].capitalized)) //month is int less than 12
Sebagai contoh:
print((DateFormatter().monthSymbols[11-1].capitalized))
Keluaran
November
sumber
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);
sumber
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)]; }
sumber
Anda seharusnya bisa menyingkirkan rilis dan alokasi ulang dateFormatter, memotong beberapa baris, tapi hanya itu yang saya lihat.
sumber