编辑:我的解决方案如下。
我有一种与日历相关的应用程序,用户可以在其中前后跳转特定整数天数。在午夜左右测试应用程序时,我意识到存在与 DST 相关的问题,我正在寻找最佳解决方案。
该应用程序并非真正基于 iOS 中的任何日历。但是,我显示公历日期和时间,以便用户参考熟悉的日期和时间。
其中一个内置的时间跳跃是 73 天,大约是 1/5 年。常用日期为 3 月春分 +/- 73 天的整数倍。例如,当从 3 月分点跳到 73 天前的某个日期时,问题就出现了,因为 3 月分点可能在 DST,而另一个则不是。这取决于系统上的时区设置。但是,该应用程序与时区无关,因此我宁愿显示时间,就好像没有 DST 这样的东西,但仍使用本地时区。我希望这是有道理的。
关于如何实现这一目标的任何建议?如果问题太模糊,也许我可以添加更多细节,但我不想通过添加太多来混淆事情。
编辑:我决定链接来自应用程序的示例屏幕打印以说明正在发生的事情。这张图片: http: //victorspictures.com/trollart/h37a90c77#h56122c20 展示了今年春分的配置。标题说明了如何读取设备。按照图库中的下两张图片,了解如何使用该设备计算复活节日期。
无论如何,滑动手势允许用户移动 +/- 1 天或 +/- 73 天,这就是问题所在。我正在为日期显示添加时间,也许这就是我需要做的。
解决方案:Celeda 的建议
添加了这个方法:
- (NSDate *)setNoon: (NSDate *)date
{
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date];
[components setHour:12];
NSDate *todayNoon = [calendar dateFromComponents:components];
return todayNoon;
}
然后,到处进行跳转,它被简单地封装在新方法中:
newDate = [self setNoon:[previousCode]];