Какие спецификаторы формата разрешены в iOS DateFormatter dateFormat fromTemplate? - PullRequest
0 голосов
/ 10 марта 2019

Я не могу найти список спецификаторов формата, разрешенных в аргументе шаблона DateFormatter.dateFormat(fromTemplate:options:locale:).

  1. dateFormat направляет меня к ...
  2. Руководство по программированию даты и времени .Ни на одной из этих страниц не указаны спецификаторы формата.Поэтому я проверил предлагаемую соответствующую документацию ...
  3. Руководство по программированию даты и времени для Core Foundation не имеет списка.
  4. Руководство по форматированию данных *У 1018 * есть заголовок раздела «Использовать строки формата для задания пользовательских форматов», но он просто указывает мне на (1) выше.Ни одна из других страниц в Руководстве по форматированию данных не имеет спецификаторов формата.

Кто-нибудь знает, где Apple документирует эти спецификаторы?

1 Ответ

0 голосов
/ 11 марта 2019

Я расширю ответ в комментарии с некоторыми примерами.Для iOS 7 и более поздних версий коды форматов здесь: http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns. Таблица слишком велика, чтобы скопировать все это здесь, но вот несколько, которые помогли мне начать.См. Эту ссылку для всех форматов и объяснений.

  • эра: G (AD), GGGG (Anno Domini)
  • год: у (1984), уу (84),гггг (1984)
  • месяц: М, ММ, МММ, ММММ, МММММ.Также: L
  • день месяца: d, dd
  • название дня недели: E, EEEE, EEEEE, EEEEEE

Вот фрагмент игровой площадки, который я нашелполезно изучить их.

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"
...