如何创建将处于DST模式的NSDate

时间:2016-08-31 13:06:34

标签: objective-c swift nsdate

我想知道如何创建将处于DST模式的NSDate。

我正在使用方法O(V+E)

这是来自文档:

  

此属性包含下一个日期(在当前日期之后)   即时)接收器的夏令时转换。根据   在接收者的时区,该属性的值可以   表示时区偏离GMT的变化。返回nil if   接收器的时区目前没有观察到日光   节省时间。

而且我验证它是否处于DST模式:

我正在使用方法:nextDaylightSavingTimeTransition

这是来自文档:

  

如果接收方在aDate使用夏令时,则为YES,否则为NO。

代码:

isDaylightSavingTimeForDate:

不幸的是我的NSDate *nextDstTransition = [[NSTimeZone localTimeZone] nextDaylightSavingTimeTransition]; BOOL isDstOnForOldDate = [[NSTimeZone localTimeZone] isDaylightSavingTimeForDate:nextDstTransition]; 不在DST中。我的假设与时区问题有关。

您能否分享一下在DST模式下创建nextDstTransition的选项。

2 个答案:

答案 0 :(得分:1)

经过调查并寻找最优雅的解决方案后,我明白可以这样做。

//This is date object and from beginning we could make prediction that is is in DST Mode.    
NSDate *workDateInDST = [[NSTimeZone localTimeZone] nextDaylightSavingTimeTransition];
//Hear we could validate if it is DST or not
if (![[NSTimeZone localTimeZone] isDaylightSavingTimeForDate:workDateInDST]) {
    workDateInDST = [NSDate date];
}

答案 1 :(得分:1)

如果您仔细阅读文档:nextDaylightSavingTimeTransition:下次DST在给定日期后更改时返回,如果您处于DST永不更改的时区(始终打开或始终关闭),则返回nil。如果您的日期是夏令时,那么您没事,否则您需要知道它何时发生变化。

NSDate* date = ...
if (! [[NSTimeZone localTimeZone] isDaylightSavingTimeForDate:date]) {
    NSDate* change = [[NSTimeZone localTimeZone] nextDaylightSavingTimeTransitionAfterDate:date];
    if (change != nil) {
        date = change;
    } else {
        // Tough, there is no DST in this time zone. 
    }
}