我需要检查当前日期是否处于夏令时中。伪代码如下:
let date = NSDate()
if date.isDaylightSavingsTime {
print("Success")
}
我在互联网上没有找到解决这个问题的方法。
NSDate
仅代表时间的绝对点。 要确定一个日期是否在夏令时期间,就需要在时区的上下文中解释它。
因此,在 NSTimeZone
类中而不是 NSDate
类中,你将找到该方法。 示例:
let date = NSDate()
let tz = NSTimeZone.localTimeZone()
if tz.isDaylightSavingTimeForDate(date) {
}
Swift 3/4 更新:
let date = Date()
let tz = TimeZone.current
if tz.isDaylightSavingTime(for: date) {
print("Summertime, and the livin' is easy ... ")
}
Swift 4.0或更高版本
您可以通过时区标识符或缩写的两种方式来检查日期是否为夏令时。
let timeZone = TimeZone(identifier: "America/New_York")!
if timeZone.isDaylightSavingTime(for: Date()) {
print("Yes, daylight saving time at a given date")
}
let timeZone = TimeZone(abbreviation: "EST")!
if timeZone.isDaylightSavingTime(for: Date()) {
print("Yes, daylight saving time at a given date")
}
NSDate()
是一个基础类,并且在Swift和Obj-C中本质上采用相同的方法和参数,因此以下线程应该能够帮助您(obj-c):http://stackoverflow.com/questions/28438156/incorrect-time-string-with-nsdateformatter-with-daylight-saving-time。请特别查看LeoDabus的答案,它使用了Swift(和`NSTimeZone`)。 - dfrib