我想知道如何创建将处于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
的选项。
答案 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.
}
}