Вы говорите:
Я хотел бы отформатировать дату и время в США, независимо от того, какой язык у пользователя.Как я могу это сделать?
Укажите Locale
из en_US_POSIX
:
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd hh:mm a"
formatter.locale = Locale(identifier: "en_US_POSIX")
Язык не единственный вопрос.
Есть также вопрос о часовом поясе.Например, вы едете из Чикаго и едете из центральных часовых поясов в восточные;Вы действительно хотите считать, что прошел один час?
Вы действительно хотите сбросить секунды?Если вы сделаете это, то 59 секунд с 8:00:00 до 20:00:59 будут считаться «нулевыми минутами», а одна секунда с 8:00:59 до 8:01:00 будет считаться «одной».минута ».
Честно говоря, если бы я хотел сохранить строку даты, не зависящую от локали и часового пояса, я бы предложил использовать ISO8601DateFormatter
.
Тогда ясохранит oldTime в UserDefaults
и будет использовать его для последующих вычислений.
Если именно поэтому вы используете DateFormatter
, я бы предложил сохранить объект Date
напрямую,
UserDefaults.standard.set(oldTime, forKey: "oldTime")
И для его получения:
if let oldTime = UserDefaults.standard.object(forKey: "oldTime") as? Date {
...
}
В терминах вычисления количества минут между двумя Date
объектами
let minutes = Calendar.current
.dateComponents([.minute], from: date1, to: date2)
.minute
Есливам нужно количество секунд, вы также можете использовать timeIntervalSince
:
let seconds = date2.timeIntervalSince(date1)
И если вы хотите показать количество прошедшего времени в виде удобной локализованной строки:
let intervalFormatter = DateComponentsFormatter()
intervalFormatter.allowedUnits = [.minute, .second]
intervalFormatter.unitsStyle = .full
let string = intervalFormatter.string(from: date1, to: date2)