Ios NSTimeZone是DaylightsavingTimeOrdate

Ios NSTimeZone是DaylightsavingTimeOrdate,ios,objective-c,xcode,nstimezone,Ios,Objective C,Xcode,Nstimezone,作为obj c的新手,我遇到了一个日历应用程序的问题,我正在开发的日历应用程序表面上与本地应用程序大致相同。在夏令时,我在处理前一天选择错误日期的按钮时遇到了麻烦。在搜索了一个解决方案后,我没有找到任何解决方案,于是我想出了以下代码。有经验的程序员能告诉我是否有更整洁或更有效的方法来做到这一点吗。我觉得这段代码有点笨重。如有任何建设性意见,将不胜感激 - (IBAction)dateButtonPressed:(id)sender; { NSDateComponents *offset = [N

作为obj c的新手,我遇到了一个日历应用程序的问题,我正在开发的日历应用程序表面上与本地应用程序大致相同。在夏令时,我在处理前一天选择错误日期的按钮时遇到了麻烦。在搜索了一个解决方案后,我没有找到任何解决方案,于是我想出了以下代码。有经验的程序员能告诉我是否有更整洁或更有效的方法来做到这一点吗。我觉得这段代码有点笨重。如有任何建设性意见,将不胜感激

- (IBAction)dateButtonPressed:(id)sender; {
NSDateComponents *offset = [NSDateComponents new];
offset.day = [self.dayButtons indexOfObject:sender];
NSDate *selectedDate = [self.calendar dateByAddingComponents:offset toDate:self.beginningDate options:0];
NSTimeZone *currentZone = [NSTimeZone localTimeZone]; 

if ([currentZone isDaylightSavingTimeForDate:selectedDate]) {
   offset.hour = +1;
   selectedDate = [self.calendar dateByAddingComponents:offset toDate:self.beginningDate options:0];
}
self.calendarView.selectedDate = selectedDate;
NSLog(@"pressed %@",selectedDate);
}

你为什么担心时区?转换例程应该为您处理它。显示更多代码!如何生成self.beginingdate和self.calendar?NSLog打印什么?尝试记录self.beginningDate和offset。beginningDate是calandar上的第一个月。偏移量为非夏令时生成+1天,为夏令时生成+1天+1小时。此代码表示当前日期是所选日期的0000hr戳记。如果没有if语句,在夏令时波段中选择日期时,它会在所选日期的前一天生成2300:00。总之,这意味着我可以将所选日期传递给下一个视图控制器,以显示该日期的相关数据。我只是想知道这是不是一种更好的方法。热舔-如果没有IsDayLightSavingTimeOrDate位,SeleceTDate是错误的日期。剩下的大部分代码都是从github的TimeSquare中派生出来的。在节省时间的过渡期,即今晚,您最多可能一年遇到两次问题。但是如果日历的时区设置正确的话,你就不应该这样做。我怀疑日历的时区设置与格式化日期时使用的时区不同。