Неверная дата из строки

#ios #swift #date

#iOS #swift #Дата

Вопрос:

Я где-то скопировал расширение для Date объекта Swift, которое позволяет мне инициализировать a Date из строки следующим образом:

 extension Date {
    init(fromString: String) {
        let str = "(fromString) 12:00"
        let dateStringFormatter = DateFormatter()
        dateStringFormatter.dateFormat = "yyyy-MM-dd hh:mm"
        dateStringFormatter.timeZone = NSTimeZone.default
        let d = dateStringFormatter.date(from: str)!
        self.init(timeInterval: 0, since: d)
    }
}
 

Если, например, я передаю "2016-10-16" как строку для пользовательского инициализатора, дата при печати должна быть "2016-10-16 22:00:00 0000" , но прямо сейчас это: "2016-10-15 22:00:00 0000" .

Есть идеи, почему?
Спасибо!

Комментарии:

1. Кто когда-либо возражал против того, чтобы объяснить, почему?

2. Почему это должно быть 2016-10-16 22:00:00 0000 ? Если ваш часовой пояс равен UTC 2, то полночь 16-го числа действительно равна 22:00 UTC предыдущего дня.

3. Подождите, так hh:mm что занимает время am / pm, а не 24 часа?

4. nsdateformatter.com @LinusG. проверьте это

5. Официальная спецификация здесь: unicode.org/reports/tr35/tr35-31 /… hh — это 12-часовой формат (1-12). То, что вы хотите, это HH (0-23) (и используйте 0:00, а не 12:00)

Ответ №1:

Проблема решена благодаря @jcaron.

Проблема

Проблема заключалась в том, что я перепутал 12 и 24-часовой fomat при выполнении "hh:mm" . Это используется для 12-часовых форматов, в то время как я хотел использовать 24-часовой формат.

Решение

Чтобы решить эту проблему, "hh:mm" необходимо изменить на "HH:mm"