2016-05-27 1 views
0

я в настоящее время имеют целочисленную переменную в течение часа текущего дня, я вычислил это так:Преобразование в формат строки в зависимости от настроек iPhone (13:00 против 1:00 PM) в Swift

let tz = NSTimeZone.defaultTimeZone() 
let now = NSCalendar.currentCalendar().componentsInTimeZone(tz, fromDate: NSDate()) 
let currHour: Int = now.hour //6 for 6:35PM (current time) 

Как преобразовать это в строку с учетом текущих настроек времени iPhone. Например, мой телефон настроен на 24-часовой раз, в то время как другого iPhone нет. Используя приложение Starbucks в качестве примера, глядя на местные магазины, он скажет либо «Открыть до 22:00» на моем телефоне, либо «Открыть до 22:00» на другом телефоне.

Значение по умолчаниюTimeZone устанавливается в America/New_York в делегате приложения.

+1

Вы пробовали 'NSDateFormatter'? Он делает все это для вас. – rmaddy

+0

https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/InternationalizingLocaleData/InternationalizingLocaleData.html – Alexander

+0

NSDate является агностиком локали. Это гарантирует, что два объекта даты, которые представляют одно и то же время/дату, всегда будут равнозначными даже в разных локалях. – Alexander

ответ

0

NSDateFormatter делает это автоматически. Просто установите timeStyle на .ShortStyle.

let formatter = NSDateFormatter() 
formatter.dateStyle = .NoStyle 
formatter.timeStyle = .ShortStyle 
let timeString = formatter.stringFromDate(NSDate()) 

Значение timeString будет уместна для локали пользователя и настройки их устройств.

+0

Он отлично работал. Чтобы создать NSDate(), я использовал NSDate (fromTimeInterval), а затем использовал код, который вы предоставили, чтобы вернуть строку. Спасибо огромное! –