Недопустимая дата после преобразования 12h - > 24h
Я хочу, чтобы преобразовать время суток до 24 часов. Это должно быть совершенно тривиальным... однако я стою против странного вопроса:
let inputDateString = "11:05:45PM"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm:ssa"
let inputDate = dateFormatter.dateFromString(inputDateString) // "Jan 1, 2000, 12:05 PM" ???
if let inputDate = inputDate {
dateFormatter.dateFormat = "HH:mm:ss"
print(dateFormatter.stringFromDate(inputDate))
}
- я подумал, что, возможно, это преобразование времени с помощью какого-то странного часового пояса. Поэтому я попытался добавить
systemLocale
или GB locale, но это не помогло. - тогда мне пришла в голову мысль, что, возможно, он не может установить дату, предшествующую 01.01.2000 12:00:00 (что лишено смысла, потому что он должен работать по крайней мере с года ~1970). Поэтому я добавил день, месяц и т. д. перенесем его на 2005 год, но проблема все равно сохраняется.
Вы можете легко вставить это на игровую площадку с import Foundation
, чтобы проверить его.
Почему я ошибаюсь часом?
-- Edit --
Если вы измените inputDateString
на любой другой час, например "01:05:45PM"
, то inputDate
будет таким же :/ но если вы измените минуты или секунды, он будет обновлен соответствующим образом.
2 ответа:
Необходимо изменить формат dateFormat на
DateFormatter использует стандарт Unicode для форматирования, поэтому он использует значения, найденные в документации Unicode (действительны для macOS 10.9 и iOS 7 и новее, начиная с 08/2016)."hh:mm:ssa"
, так как нижний регистрh
означает, что время ввода находится в 12-часовом формате.Более простая в использовании ссылка может быть найдена на http://nsdateformatter.com .
let inputDateString = "11:05:45PM" let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "HH:mm:ssa" // Here, change the format string to "hh:mm:ssa" let inputDate = dateFormatter.dateFromString(inputDateString) // "Jan 1, 2000, 12:05 PM" ??? if let inputDate = inputDate { dateFormatter.dateFormat = "HH:mm:ss" print(dateFormatter.stringFromDate(inputDate)) }