Недопустимая дата после преобразования 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))
}
  1. я подумал, что, возможно, это преобразование времени с помощью какого-то странного часового пояса. Поэтому я попытался добавить systemLocale или GB locale, но это не помогло.
  2. тогда мне пришла в голову мысль, что, возможно, он не может установить дату, предшествующую 01.01.2000 12:00:00 (что лишено смысла, потому что он должен работать по крайней мере с года ~1970). Поэтому я добавил день, месяц и т. д. перенесем его на 2005 год, но проблема все равно сохраняется.

Вы можете легко вставить это на игровую площадку с import Foundation, чтобы проверить его.

Почему я ошибаюсь часом?

-- Edit --

Если вы измените inputDateString на любой другой час, например "01:05:45PM", то inputDate будет таким же :/ но если вы измените минуты или секунды, он будет обновлен соответствующим образом.

2 2

2 ответа:

Необходимо изменить формат dateFormat на "hh:mm:ssa", так как нижний регистр h означает, что время ввода находится в 12-часовом формате.

DateFormatter использует стандарт Unicode для форматирования, поэтому он использует значения, найденные в документации Unicode (действительны для macOS 10.9 и iOS 7 и новее, начиная с 08/2016).

Более простая в использовании ссылка может быть найдена на 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))
}