Добавление смещения времени в Swift
у меня есть куча разных времен показа в базе данных и хотите отобразить правильное время на основе часового пояса пользователей, создав смещение.
Я получаю смещение часового пояса пользователей от GMT и сначала конвертирую его в часы.
NSTimeZone.localTimeZone().secondsFromGMT / 60 / 60
тогда мне нужно найти способ добавить часы в объект даты.. вот где я / м борется.
let formatter = NSDateFormatter()
formatter.dateFormat = "HH:mm"
let date = formatter.dateFromString(timeAsString)
println("date: (date!)")
затем я создаю строку с даты для использования в метке, чтобы ее было легко читать с помощью AM / ПОСЛЕ ПОЛУДНЯ.
formatter.dateFormat = "H:mm"
formatter.timeStyle = .ShortStyle
let formattedDateString = formatter.stringFromDate(date!)
println("formattedDateString: (formattedDateString)")
Я просто не могу понять, как добавлять/вычитать часы. Я разделил строку, но иногда она становится отрицательной и не работает. Может, я все делаю неправильно.
Спасибо за любую помощь.
Кит
3 ответов
если вы хотите преобразовать время показа, которое хранится в виде строки в GMT, и вы хотите показать его в локальном часовом поясе пользователя, вы должны не вручную регулировать NSDate
/Date
объекты. Вы должны просто использовать соответствующие часовые пояса с formatter. Например, в Swift 3:
let gmtTimeString = "5:00 PM"
let formatter = DateFormatter()
formatter.dateFormat = "h:mm a"
formatter.timeZone = TimeZone(secondsFromGMT: 0) // original string in GMT
guard let date = formatter.date(from: gmtTimeString) else {
print("can't convert time string")
return
}
formatter.timeZone = TimeZone.current // go back to user's timezone
let localTimeString = formatter.string(from: date)
или в Swift 2:
let formatter = NSDateFormatter()
formatter.dateFormat = "h:mm a"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) // original string in GMT
let date = formatter.dateFromString(gmtTimeString)
formatter.timeZone = NSTimeZone.localTimeZone() // go back to user's timezone
let localTimeString = formatter.stringFromDate(date!)
Я бы использовал dateByAddingTimeInterval функция для добавления и вычитания часов. Добавьте a в строку dateFormat для печати am или pm.
var showTimeStr = "00:00 PM" //show time in GMT as String
let formatter = NSDateFormatter()
formatter.dateFormat = "hh:mm a"
let showTime = formatter.dateFromString(showTimeStr)
showTime.dateByAddingTimeInterval(3600) //Add number of hours in seconds, subtract to take away time
showTimeStr = formatter.stringFromDate(showTime)
вот мой окончательный код в сочетании с b.Морганы отвечают. Думаю, теперь все работает.
let offsetTime = NSTimeInterval(NSTimeZone.localTimeZone().secondsFromGMT)
var showTimeStr = "05:00 PM" //show time in GMT as String
let formatter = NSDateFormatter()
formatter.dateFormat = "h:mm a"
let showTime = formatter.dateFromString(showTimeStr)
let finalTime = showTime?.dateByAddingTimeInterval(offsetTime) //Add number of hours in seconds, subtract to take away time
showTimeStr = formatter.stringFromDate(finalTime!)