将DayLightSavingTime应用于NSDate

时间:2016-06-01 13:04:36

标签: ios swift nsdate nstimezone

我从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 ?? ""
    }

1 个答案:

答案 0 :(得分:0)

NSDate本质上是UTC(它没有时区)。最好以UTC格式保存/转移日期。然后,您可以将此UTC时间戳转换为您偏好的任何时区。请尝试转换为您的首选时区,而不是检测用户是否为DST。以下是如何将任何日期转换为本地时区的示例。

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)