Swift DateIntervalFormatter: хранить даты вне строки, даже если интервал охватывает несколько дней - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь отформатировать временной интервал. Я хочу получить результат, который выглядит следующим образом:

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 для форматирования каждой даты (начала и конца) всего за один раз, а затем добавить две строки вместе с дефисом (-) в середине, но это не обязательно для локализации .

...