#ios #swift #date
#iOS #swift #Дата
Вопрос:
Я пытаюсь определить ввод пользователем даты истечения срока действия с текущей датой. для текущей даты я использую let now = Date()
для даты истечения срока действия после ввода пользователем в текстовое поле:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
dateFormatter.timeZone = TimeZone.current
dateFormatter.locale = Locale(identifier: "en_GB")
print("echo date input:(self.textInput.text!)")
return dateFormatter.date(from: self.textInput.text!)! as Date
но после того, как я сравниваю дату истечения срока действия, считается за один день до введенной даты:
echo date input:18/09/2020
и функция возврата даты истечения срока действия равна : 2020-09-17 17:00:00 0000
и текущая дата : 2020-09-18 08:42:11 0000
функция даты истечения срока действия возвращает не то же самое, что ввод даты в текстовое поле. Как это исправить? Если дата истечения срока действия < сейчас, она вернет false .
обновление, после перехода на GMT или UTC:
dateFormatter.timeZone = TimeZone(abbreviation: "GMT")
или
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
возврат 2020-09-18 00:00:00 0000
— это то, что считается истекшей датой <сейчас (по-прежнему неверно). какая дата на самом деле истекла == сейчас
Комментарии:
1. Где вы сейчас находитесь? Что
TimeZone.current
возвращается?2. @Larme, когда я печатаю часовой пояс.текущий — Азия / Джакарта (текущий)
3. Перед любым сравнением вы должны подготовить оба объекта date с одинаковым часовым поясом и локализацией, поскольку вы получите такое поведение в разных часовых поясах. Лучше всего для сравнения установить часовой пояс на UTC, а затем запустить сравнение
4. И разве у вас нет разницы в 7 часов с UTC? Итак
2020-09-17 17:00:00 0000
, полночь у вас дома? Видите проблему? Вы говорите, что «18/09/2020» будет полночь в ВАШЕМ часовом поясе, поэтому он возвращается2020-09-17 17:00:00 0000
. Это нормально. Но на самом деле, вы хотели, чтобы это было в полночь, где? UTC? Всегда предпочитает UTC «сравнение» и форматирует вывод только для пользователя, но всегда использует один и тот же часовой пояс внутри (UTC настоятельно рекомендуется).5. @Larme, в моем текущем времени на самом деле 2020-09-18, а не 2020-09-17 17:00:00 0000