我应该使用NSDateFormatter的哪个setDateFormat选项来获取月份-日期的序号后缀?
例如,下面的代码片段当前生成:
8月15日星期六下午3:11
我必须改变什么才能获得:
8月15日星期六下午3:11 th
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?
发布于 2021-01-11 01:55:50
我只是使用了这里的一些答案来解决这个问题,但我认为我的解决方案与这里的一些解决方案有点不同。
我喜欢使用NumberFormatter来正确地处理序数格式(带有本地化),使用DateFormatter来处理其余的内容,但是我不喜欢这些解决方案中的一些需要每次使用时都需要重新构建日期格式化程序(这很昂贵)。
下面是我正在使用的,通过依靠苹果的API,它应该可以提供良好的本地化,并且不应该因为格式化程序的静态创建(需要iOS 9.0+)而太过繁重的处理:
// ...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)
}
https://stackoverflow.com/questions/1283045
复制相似问题