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];
これはそれを行う方法ですか?少し冗長です。
別のオプションは、monthSymbolsメソッドを使用することです。
int monthNumber = 11; //November
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];
MonthSymbolsはゼロベースなので、1..12 monthNumberから1を引く必要があることに注意してください。
Swift 2.
let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]
Swift 4.
let monthName = DateFormatter().monthSymbols[monthNumber - 1]
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
お役に立てれば
これに対する最善の解決策は、standaloneMonthSymbols
メソッド、
-(NSString*)MonthNameString:(int)monthNumber
{
NSDateFormatter *formate = [NSDateFormatter new];
NSArray *monthNames = [formate standaloneMonthSymbols];
NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)];
return monthName;
}
どうですか:
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];
Anna KareninaとCarlの両方の回答は、一部の文化では名義で月の名前を返さないため、うまく機能しません。この問題を解決するPascalの提案されたソリューションを使用することをお勧めします(monthSymbols
をstandaloneMonthSymbols
に置き換えることにより)
In Swift 3.
let monthNumber = 3
let fmt = DateFormatter()
fmt.dateFormat = "MM"
let month = fmt.monthSymbols[monthNumber - 1]
print(month)
// result
"March\n"
NSDateから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から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);
Swift 4.X
print((DateFormatter().monthSymbols[month-1].capitalized)) //month is int less than 12
例えば:
print((DateFormatter().monthSymbols[11-1].capitalized))
出力
11月
そして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)];
}
DateFormatterのリリースと再割り当てを取り除いて、2、3行を削除できるはずですが、それだけです。