2015-05-01 6 views
1

Я пытаюсь использовать dateFormatter для преобразования из строки. Он отлично работает на симуляторах и отлично работает на моем телефоне, когда установлен на 12-часовое время, но не устанавливается, когда мой телефон настроен на 24 часа. (Он устанавливается, когда симулятор установлен на 24 часа).dateFromString не удается преобразовать на Iphone, установленном на 24 часа быстро

passedTime = "10:36 pm" 
var dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "h:mm a" 
let pickerDate = dateFormatter.dateFromString(passedTime) 
println(pickerDate) 

Как я уже сказал, при запуске на тренажере или на моем телефоне в 12 часов, он отлично работает, но когда телефон ПГТ 24 часа, он печатает ноль. Я прочитал кое-что о настройках локали, но когда я запустил это на своем телефоне, местный тот же, независимо от того, есть ли у меня 12-часовой или 24-часовой режим.

+0

Как вы получаете время с телефона? Обычно я просто создаю новый объект NSDate для получения текущего времени и даты. – Garret

+2

Вам необходимо установить языковой стандарт. См. Http://stackoverflow.com/questions/6613110/what-is-the-best-way-to-deal-with-the-nsdateformatter-locale-feature –

+0

@HotLicks Возможно, лучше всего дать комментарий к ответам, которые вы решите вниз голос. –

ответ

0

Обязательно поставьте чек на 12h/24h и настройте форматтер соответственно, используя «H» в течение 24 часов и «h» в течение 12 часов.

enter image description here

Таблица взята из a blog post on Waracle.com, где вы можете найти полный список.

+1

@MartijnPieters Извините, но вы nitpicking. Каждому было ясно, что это была цитата, помещение изображения в блок-образец не имеет особого смысла, и была дана правильная ссылка. И пример - всего лишь пример, вам ничего не нужно «следовать», это не правило, оно говорит только «вот как вы ** можете это сделать». И, пожалуйста, прекратите повторную публикацию одной и той же ссылки снова и снова, все здесь уже видели ее после вашего первого комментария, мы не замедлили. Если у вас слишком много времени на ваших руках, то идите и исправьте все цитаты на SO, для меня ответ был хорошим, как и было. – Mecki

+0

@Mecki политика заключается в использовании blockquote. Сейчас это становится бесполезным шумом. Если вы хотите обсудить политику, вы можете опубликовать ее в [Мета]. –

0

Как насчет использования двух форматов даты для разбора?

var time12hrFormatter = NSDateFormatter() 
time12hrFormatter.dateFormat = "h:mm a" 
var time24hrFormatter = NSDateFormatter() 
time24hrFormatter.dateFormat = "HH:mm" 

if let pickerDate = time12hrFormatter.dateFromString(passedTime) { 
    println(pickerDate) 
} else if let pickerDate = time24hrFormatter.dateFromString(passedTime) { 
    println(pickerDate) 
} else { 
    println("failed to parse '\(passedTime)'") 
} 
+0

Я пробовал что-то вроде этого, и он все еще терпит неудачу (по телефону, а не симулятор). Строка четко отформатирована в форме h: mm, поэтому попытка разобрать ее в HH: mm не работает. Я не могу объяснить, почему h: mm a работает только тогда, когда телефон находится в 12-часовом формате. –

+0

В этом случае я думаю, что @HotLicks уже предоставил ответ выше: _ установите локальный формат даты на тот, который является нейтральным ._ – skim

2

У меня была точно такая же проблема ... очень расстраиваю. Решение состоит в том, чтобы установить локаль вашего календаря. Для Swift 3 это: yourDateFormatter.locale = Locale(identifier: "en-US")