ios - 将 DayLightSavingTime 应用于 NSDate

标签 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 ?? ""
    }

最佳答案

NSDate 本质上是 UTC(它没有时区)。最好以 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)

关于ios - 将 DayLightSavingTime 应用于 NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37569559/

相关文章:

swift - Swift 有夏令时检查吗?

iOS 将 NSString 转换为 NSDate 始终为 nil

iphone - UISearchBar范围栏色调颜色问题

ios - 在 iOS 中将 UTC 日期时间转换为本地日期时间

swift - 在 swift 4 或更高版本上创建触摸测试应用程序

ios - 在 for 循环中使用日期格式化程序的 dateFromString api 会产生巨大的内存问题

ios - 当应用程序等待审核时,我可以更改我的 bundle 显示名称(应用程序下方的文本)吗

objective-c - 在 NSString 文本 block 中分隔完整的句子

ios - 为什么 webView.loading 在加载页面时不给我 false - Swift

ios - Swift 中的顺序淡入淡出