Я пытаюсь отформатировать временной интервал. Я хочу получить результат, который выглядит следующим образом:
10:45 - 12:00 AM
Я могу очень близко подойти к этому, используя DateInvervalFormatter
:
let cal = Calendar.current
let formatter = DateIntervalFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
let start = Date()
let end = cal.date(byAdding: .hour, value: 1, to: start)
formatter.string(from: DateInterval(start: start, end: end!))
Выше (в локали en_US) будет получено вывод, например:
5:27 – 6:27 PM
Хорошо выглядит, верно? Однако это не работает, если две даты в интервале находятся в разные дни. Например:
let formatter = DateIntervalFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
let startComponents = DateComponents(year: 2020, month: 1, day: 1, hour: 23, minute: 45)
let start = cal.date(from: startComponents)
let end = cal.date(byAdding: .hour, value: 1, to: start!)
formatter.string(from: DateInterval(start: start!, end: end!))
Несмотря на установку dateStyle
в .none
, строка, полученная в приведенном выше примере (в локали en_US):
1/1/2020, 11:45 PM – 1/2/2020, 12:45 AM
То, что я хочу, это :
11:45 PM – 12:45 AM
Как я могу получить это? Я знаю, что мог бы использовать DateFormatter
для форматирования каждой даты (начала и конца) всего за один раз, а затем добавить две строки вместе с дефисом (-
) в середине, но это не обязательно для локализации .