假设我希望日期看起来像这样:
|1988|December|30|
如何将这些添加到 dateFormatter 或就此而言让格式如下所示:
30 in the month of December in the year of 1998
现在对于 1988 年、12 月和 30 日,我想使用标准格式,但我希望我放的文字也能伴随它们。
特别是在上述情况下,格式和管道与日期或月份的日期格式相邻,格式和管道之间没有空格。
仅通过设置格式就可以做到这一点吗?
假设我希望日期看起来像这样:
|1988|December|30|
如何将这些添加到 dateFormatter 或就此而言让格式如下所示:
30 in the month of December in the year of 1998
现在对于 1988 年、12 月和 30 日,我想使用标准格式,但我希望我放的文字也能伴随它们。
特别是在上述情况下,格式和管道与日期或月份的日期格式相邻,格式和管道之间没有空格。
仅通过设置格式就可以做到这一点吗?
例如,您可以以日期格式插入任意文本(用单引号括起来)。
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
[fmt setDateFormat:@"dd' in the month of 'MMMM' in the year of 'yyyy"];
NSString *s = [fmt stringFromDate:[NSDate date]];
结果:
09 2013年7月
斯威夫特版本:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE' text here 'h:mm' and there 'a"
针对 iOS 13、Swift 5、Xcode 11 和基于 Martin R 的答案进行了更新
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone.current
dateFormatter.locale = Locale.current
dateFormatter.dateFormat = "dd' in the month of 'MMMM' in the year of 'yyyy"
let stringDate = dateFormatter.string(from: Date())
print(stringDate)
// printed:
// 7 in the month of October in the year of 2019
PS如果你想要一个撇号,然后使用:''
直接在字符串中。例如"MMM d, ''yy"
->Nov 10, '19
扩大:
如果您也想添加序数指示符(例如,“13th”之后的“th”),您实际上可以在日期格式化字符串中执行此操作。
因此,如果您Nov 10th
愿意,代码将是:
/// Get date.
let date = Date()
/// Get just the day of the date.
let dayAsInt = Calendar.current.component(.day, from: date)
/// Init the formatter.
let dateFormatter = DateFormatter()
/// Set the format string.
/// Notice we include the 'MMM' to extract the month from the date, but we use a variable to get the 'th' part.
dateFormatter.dateFormat = "MMM '\(dayAsInt.getStringWithOrdinalIndicatorIfPossible)'"
let formattedDate = dateFormatter.string(from: date)
/// Will print out Nov 10th or Apr 1st or whatever.
这是我为提供帮助而做的扩展:
/// This variable only adds the ordinal indicator if the Int that is calling this function can be converted to an NSNumber.
/// An ordinal indicator is the `rd` after `3rd` or the `st` after `1st`.
var getStringWithOrdinalIndicatorIfPossible: String {
let formatter = NumberFormatter()
formatter.numberStyle = .ordinal
return formatter.string(from: NSNumber(value: self)) ?? "\(self)"
}