我在数据库中有一堆不同的展示次数,并希望通过创建一个偏移量来显示基于用户时区的正确时间.
我得到用户时区偏离GMT,并将其转换为数小时.
NSTimeZone.localTimeZone().secondsFromGMT / 60 / 60
然后我需要找到一个方法来添加时间到日期对象..这是我/挣扎的地方.
let formatter = NSDateFormatter() formatter.dateFormat = "HH:mm" let date = formatter.dateFromString(timeAsString) println("date: \(date!)")
然后,我从标签中的日期创建一个字符串,以便使用AM / PM轻松阅读.
formatter.dateFormat = "H:mm" formatter.timeStyle = .ShortStyle let formattedDateString = formatter.stringFromDate(date!) println("formattedDateString: \(formattedDateString)")
我似乎找不到如何添加/减少时间.我已经将字符串分开,但有时会变为负数,并且不起作用.也许我会这样做错了.
感谢任何帮助.
基思
如果要将以GMT格式存储的显示时间转换为用户的本地时区,则不应手动调整NSDate / Date对象.您应该使用与格式化程序相应的时区.例如,在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!)