iOS:如何从数字中获取正确的月份名称?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS:如何从数字中获取正确的月份名称?相关的知识,希望对你有一定的参考价值。

我知道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月份的数字中减去1。

另一答案

和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的释放和重新分配,删除几行,但这就是我所看到的。

另一答案

您可以更改NSDateFormatter的日期格式。所以简化你的代码:

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

希望这可以帮助

另一答案

Swift 2.0

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

Swift 4.0

let monthName = DateFormatter().monthSymbols[monthNumber - 1]
另一答案

对此最好的解决方案是,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

另一答案

在Swift 3.0中

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

    // result
   "March
"        
另一答案

NSDate到NSString - >作为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 - >作为Dateformat Ex:2015年6月24日,下午1: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);
另一答案

Swift 4.X

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

例如:

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

产量

十一月

以上是关于iOS:如何从数字中获取正确的月份名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 DateTime 获取完整的月份名称

如何从 Presto 中的日期获取月份名称

在 iOS 中获取月份的本地化名称

如何从 SQL Server 中的日期获取月份编号(不是月份名称)?

如何从 Power BI 中的月份编号获取月份名称?

从jooq中的日期获取月份名称