Исправлена дата истечения срока действия

#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