2016-08-23 3 views
2

Я хочу конвертировать AM/PM время в 24h. Это должно быть совершенно тривиальным ... однако я стою против странного вопроса:Недействительная дата после конвертации 12h -> 24h

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 (что не имеет смысла, потому что оно должно работать хотя бы с года ~ 1970). Поэтому я добавил день, месяц и т. Д., Чтобы перенести его на 2005 год, но проблема все еще сохраняется.

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

Почему я получаю неправильный час?

- Edit -

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

+0

Первый формат должен быть 'чч: мм: ssa' – Desdenova

+2

1 января 2000 потому, что вы хотите прочитать даты без даты, но только время. Он ставит по умолчанию в нем. – pedrouan

+0

@pedrouan Это был не вопрос. Во всяком случае, ответ уже ниже;). – Vive

ответ

2

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

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

Простую в использовании ссылку можно найти на http://nsdateformatter.com.

+0

Второй - фантастическая ссылка, спасибо за URL! – Vive

+0

DateFormatter интерпретирует строку формата буквально. «A» просто говорит об этом, это позиция, в которой информация AM/PM может быть найдена. Ему все еще нужно знать, находится ли фактический вход часов в 12-часовой ('hh') или 24-часовой (' HH') стиль. –

0
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)) 
} 
+0

Это тот же ответ, что и @ ast1, опубликованный 20 минут назад и принятый. Какая прибыль от этого ответа? – Vive

Смежные вопросы