将 DayLightSavingTime 应用于 NSDate

apply DayLightSavingTime to NSDate

我从 UIDatePicker (timePicker) 获得了一个 NSDate,它被转换为用户时区,但它有一个小时的休息时间,因为我在夏令时。

所以我尝试检查用户是否在夏令时,如果是,它应该将时间添加到 NSDate/dateInUserTimezone。

我怎样才能做到这一点?

func convertTimeZone() ->NSDate {
        var date = timePicker.date
        print(date)
        var formatter = NSDateFormatter()

        let timeZone = NSTimeZone(abbreviation: userTimeZone())
        formatter.timeZone = timeZone
        formatter.dateFormat = "HH:mm:ss"

        var isDaylightSavingTime: Bool {
            return NSTimeZone.localTimeZone().daylightSavingTime
        }
        print(isDaylightSavingTime)

        var daylightSavingTimeOffset: NSTimeInterval {
            return NSTimeZone.localTimeZone().daylightSavingTimeOffset
        }

        let dateInUserTimezone = formatter.dateFromString(formatter.stringFromDate(date))

        return dateInUserTimezone!
    }

    func userTimeZone() -> String {
        return NSTimeZone.localTimeZone().abbreviation ?? ""
    }

NSDate 本质上是 UTC(它没有时区)。最好 save/transfer 你的 UTC 日期。然后,您可以将此 UTC 时间戳转换为您喜欢的任何时区。不要检测用户是否为夏令时,而是尝试转换为您喜欢的时区。这是一个如何将任何日期转换为本地时区的示例。

var date = ...
var myTimeZone = NSTimeZone.localTimeZone()
var df = NSDateFormatter()
df.timeZone = myTimeZone
df.dateFormat = "yyyy.MM.dd G 'at' HH:mm:ss zzz"
df.stringFromDate(date)