iOS DateFormatter dateFormat fromTemplate 中允许的格式说明符是什么?

What are the format specifiers allowed in iOS DateFormatter dateFormat fromTemplate?

我找不到 DateFormatter.dateFormat(fromTemplate:options:locale:) 的模板参数中允许的格式说明符列表。

  1. dateFormat 指示我...
  2. Date and Time Programming Guide。 None 这些页面列出了格式说明符。所以我查看了建议的相关文档...
  3. Date and Time Programming Guide for Core Foundation 没有列表。
  4. Data Formatting Guide 有一个章节标题 "Use Format Strings to Specify Custom Formats" 但它只是让我回到上面的 (1)。数据格式化指南中的其他页面 None 具有格式说明符。

有谁知道 Apple 在哪里记录了这些说明符?

我将通过一些示例来扩展评论中的答案。对于 iOS 7 及更高版本,格式代码位于此处:http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns。 table 太大,无法在此处全部复制,但这里有一些帮助我入门。有关所有格式和解释,请参阅 link。

  • 时代:G(公元),GGGG(纪元)
  • 年份:y (1984), yy (84), yyyy (1984)
  • 月份:M,MM,MMM,MMMM,MMMMM。还有:L
  • 一个月中的第几天:d, dd
  • 星期几名称:E、EEEE、EEEEEE、EEEEEE

这是我发现有助于探索这些内容的 playground 片段。

import Foundation

let components = DateComponents(
    calendar: Calendar(identifier: .gregorian), 
    timeZone: nil, 
    era: 1, 
    year: 1984, 
    month: 1, 
    day: 2, 
    hour: nil, minute: nil, second: nil, 
    nanosecond: nil, weekday: nil, 
    weekdayOrdinal: nil, quarter: nil, 
    weekOfMonth: nil, weekOfYear: nil, 
    yearForWeekOfYear: nil)
let aDate = Calendar(identifier: .gregorian).date(from: components)!
let en_US = Locale(identifier: "en_US")
var df = DateFormatter()
func formatdate(_ template: String) -> String {
    let custom = DateFormatter.dateFormat(fromTemplate: template, options: 0, locale: en_US)
    df.dateFormat = custom
    return df.string(from: aDate)
}

formatdate("Mdyyyy") // "1/2/1984"
formatdate("yyyyMMdd") // "01/02/1984"
formatdate("yyyyMMMdd") // "Jan 02, 1984"
formatdate("yyyyMMMMdd") // "January 02, 1984"
formatdate("yyyyMMMMMdd") // "J 02, 1984"
formatdate("yyyyG") // "1984 AD"
formatdate("yyyyGGGG") // "1984 Anno Domini"
formatdate("yyyyMMMddE") // "Mon, Jan 02, 1984"
formatdate("yyyyMMMddEEEE") // "Monday, Jan 02, 1984"
formatdate("yyyyMMMddEEEEE") // "M, Jan 02, 1984"

formatdate("MdYYYY") // "1/2/1984"
formatdate("YYYYMMdd") // "01/02/1984"
formatdate("YYYYMMMdd") // "Jan 02, 1984"
formatdate("YYYYMMMMdd") // "January 02, 1984"
formatdate("YYYYMMMMMdd") // "J 02, 1984"
formatdate("YYYYG") // "1984 AD"
formatdate("YYYYGGGG") // "1984 Anno Domini"
formatdate("YYYYMMMddE") // "Mon, Jan 02, 1984"
formatdate("YYYYMMMddEEEE") // "Monday, Jan 02, 1984"
formatdate("YYYYMMMddEEEEE") // "M, Jan 02, 1984"