【发布时间】:2014-02-13 21:37:12
【问题描述】:
我的问题,在我的应用程序中,我曾经显示每周的事件(每周从星期一开始),在下一个按钮上我将计算下周的日期,我的工作正常,但是在特定的一天它没有正确返回价值,
以下是我的代码
当前周末结束日期,我将添加一天以获得下周开始日期
NSDateComponents *dateComponet = [[NSDateComponents alloc] init];
[dateComponet setDay:days];
return [[self getCustomCalendar] dateByAddingComponents:dateComponet toDate:date options:0];
[self getCustomeCalendar] 在哪里,
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setLocale:[NSLocale currentLocale]];
[gregorian setFirstWeekday:2]; // 2 monday
return gregorian;
以下是几周的返回值,
周末日期:2014-02-23 00:00:00 +0000,下周开始日期:2014-02-24 00:00:00 +0000
周末日期:2014-03-02 00:00:00 +0000,下周开始日期:2014-03-03 00:00:00 +0000
周末日期:2014-03-09 00:00:00 +0000,下周开始日期:2014-03-10 00:00:00 +0000
周末日期:2014-03-16 00:00:00 +0000,下周开始日期:2014-03-17 00:00:00 +0000
周末日期:2014-03-23 00:00:00 +0000,下周开始日期:2014-03-24 00:00:00 +0000
//这是问题之一
周末日期:2014-03-30 00:00:00 +0000,下周开始日期:2014-03-30 23:00:00 +0000
您可以看到所有日期都通过添加一天正确返回,
但是对于 2014-03-30 ,当添加 +1 天时,它应该返回 2014-03-31 而不是 23 小时返回,我无法找到导致此问题的原因
知道为什么会这样吗?
【问题讨论】:
-
看来夏令时是个问题。
-
是的,最初问题发生在 3 月 9 日(即 3 月 9 日 + 一日退货 => 3 月 9 日 23 小时,有解决此问题的建议解决方案吗?
-
我遇到了这个问题,并在我严格使用 GMT 时区的所有日期对象的情况下解决了这个问题。这对我有用,因为我只需要使用统一日期。我记得 Apple 在 wwdc 2013 的一个会议上对此进行了讨论。
-
是的,最初我也是这样做的,我通过将时区设置为 GMT 来查找周开始日期,因此将适当计算以下日期,但这会带来可用性问题,因为客户看到的日期不同时区差异大于 12 小时的本地日期,有时会导致第二天
-
注意:我尝试使用 GMT 时区创建,例如 [calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];但这仅解决了一些像伦敦这样的 timzone 的问题,但对于 NewYork 来说问题就解决了
标签: ios objective-c datetime