首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSDateFormatter setDateFormat的序号月-日后缀选项

NSDateFormatter setDateFormat的序号月-日后缀选项
EN

Stack Overflow用户
提问于 2009-08-15 22:41:42
回答 17查看 27K关注 0票数 63

我应该使用NSDateFormatter的哪个setDateFormat选项来获取月份-日期的序号后缀?

例如,下面的代码片段当前生成:

8月15日星期六下午3:11

我必须改变什么才能获得:

8月15日星期六下午3:11 th

代码语言:javascript
运行
复制
NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[dateFormatter setDateFormat:@"h:mm a EEEE MMMM d"];
NSString *dateString = [dateFormatter stringFromDate:date]; 
NSLog(@"%@", dateString);

在PHP中,我会在上面的例子中使用这个:

<?php echo date('h:m A l F jS') ?>

在NSDateFormatter字符串中是否存在与S选项等效的NSDateFormatter?

EN

Stack Overflow用户

发布于 2021-01-11 01:55:50

我只是使用了这里的一些答案来解决这个问题,但我认为我的解决方案与这里的一些解决方案有点不同。

我喜欢使用NumberFormatter来正确地处理序数格式(带有本地化),使用DateFormatter来处理其余的内容,但是我不喜欢这些解决方案中的一些需要每次使用时都需要重新构建日期格式化程序(这很昂贵)。

下面是我正在使用的,通过依靠苹果的API,它应该可以提供良好的本地化,并且不应该因为格式化程序的静态创建(需要iOS 9.0+)而太过繁重的处理:

代码语言:javascript
运行
复制
// ...in a class that needs ordinal date formatting

static let stringFormatDateFormatter: DateFormatter = {
    let formatter = DateFormatter()
    // A date format, replacing `d` with `'%@'` string format placeholder
    formatter.dateFormat = "MMM '%@', YYYY" 
    return formatter
}()

static let ordinalFormatter: NumberFormatter = {
    let formatter = NumberFormatter()
    formatter.numberStyle = .ordinal
    return formatter
}()

func ordinalDateString(from date: Date) -> String {

    // Pull the day from the date
    let day = NSCalendar.current.component(.day, from: date)

    // Create the ordinal, fall back to non-ordinal number due to optionality
    let dayOrdinal = Self.ordinalFormatter.string(for: day) ?? "\(day)"

    // Create the formatter with placeholder for day (e.g. "Jan %@, 2011")
    let dateStringFormat = Self.stringFormatDateFormatter.string(from: date)

    // Inject ordinal ("Jan 10th, 2011")
    return String(format: dateStringFormat, dayOrdinal)
}
票数 0
EN
查看全部 17 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1283045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档