37

假设我希望日期看起来像这样:

|1988|December|30|

如何将这些添加到 dateFormatter 或就此而言让格式如下所示:

30 in the month of December in the year of 1998

现在对于 1988 年、12 月和 30 日,我想使用标准格式,但我希望我放的文字也能伴随它们。

特别是在上述情况下,格式和管道与日期或月份的日期格式相邻,格式和管道之间没有空格。

仅通过设置格式就可以做到这一点吗?

4

3 回答 3

84

例如,您可以以日期格式插入任意文本(用单引号括起来)。

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月
于 2013-07-09T07:44:09.973 回答
6

斯威夫特版本:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat =  "EEEE' text here 'h:mm' and there 'a"
于 2018-01-15T04:21:32.457 回答
2

针对 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)"
}
于 2019-10-07T07:13:01.090 回答