Как установить DateComponentFormatter локально, кроме текущего?

ситуация

У меня есть функция, которая использует DateComponentFormatterфункция fun string(from: Date, to: Date) вернуть отформатированную строку, основанную на разнице во времени между двумя датами, и она отлично работает. Однако я хочу вернуть эту форматированную строку всегда на английском языке (в настоящее время форматирование в соответствии с локальным устройством).

Вопросы

Как вы устанавливаете DateComponentFormatterлокально нравится то, что вы можете сделать с DateFormatter"S? Если вы не можете, как бы вы поступили?

Код:

import Foundation

func returnRemainingTimeAsString(currentDate: Date, nextDate: Date)->String {

  let dateComponentsFormatter = DateComponentsFormatter()
  dateComponentsFormatter.unitsStyle = DateComponentsFormatter.UnitsStyle.full
  dateComponentsFormatter.allowedUnits = [.day, .hour, .minute, .second]
  dateComponentsFormatter.maximumUnitCount = 1

  let differenceAsString = dateComponentsFormatter.string(from: currentDate, to: nextDate)!

  return differenceAsString
}

let currentDate = Date()
let futureDate = currentDate.addingTimeInterval(3604)
returnRemainingTimeAsString(currentDate: currentDate, nextDate: futureDate)

// prints 1 hour (if devices local is English) or 1 hora (if Spanish),
// and I want it to return always 1 hour.

2 ответа

Решение

DateComponentsFormatter имеет calendar имущество.

Получить текущий календарь, установить его локаль и назначить календарь для средства форматирования.

let dateComponentsFormatter = DateComponentsFormatter()
var calendar = Calendar.current
calendar.locale = Locale(identifier: "en_US_POSIX")
dateComponentsFormatter.calendar = calendar
dateComponentsFormatter.unitsStyle = .full
...

Чтобы средство форматирования отображало локализованные строки, необходимо указать поддерживаемые локали в целевых настройках.

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

Другие вопросы по тегам