#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"