【问题标题】:apply DayLightSavingTime to NSDate将 DayLightSavingTime 应用于 NSDate
【发布时间】:2023-03-18 00:44:01
【问题描述】:

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

【问题讨论】:

    标签: ios swift nsdate nstimezone


    【解决方案1】:

    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)
    

    【讨论】:

    • 用我的方法,时区是正确的。由于 DayLightSavingTime,它只休息一小时。我想知道如何应用它。
    • 您在哪个时区之间转换?
    • 我从 UTC 的 UIPicker 获取 NSDate,然后从 userTimeZone 函数获取带有缩写的时区。这样会将 timePicker.date 转换为在设备上选择的时间。我只需要从 dayLightSavingTimeOffset 添加一小时。
    • 您获取用户时区的 API 不正确。也许你应该使用NSTimeZone.localTimeZone()。什么是 userTimeZone()?
    • 显然你是对的。 userTimeZoner() 是我帖子底部的函数
    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多