Swift中是否有夏令时检查?

7

我需要检查当前日期是否处于夏令时中。伪代码如下:

let date = NSDate()

if date.isDaylightSavingsTime {

    print("Success")

}

我在互联网上没有找到解决这个问题的方法。


1
由于NSDate()是一个基础类,并且在Swift和Obj-C中本质上采用相同的方法和参数,因此以下线程应该能够帮助您(obj-c):http://stackoverflow.com/questions/28438156/incorrect-time-string-with-nsdateformatter-with-daylight-saving-time。请特别查看LeoDabus的答案,它使用了Swift(和`NSTimeZone`)。 - dfrib
1
@dfri https://dev59.com/zF8d5IYBdhLWcg3wNAKy#27053592 - Leo Dabus
2个回答

32

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 ... ")
}

2

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")     
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接