2013-03-18 146 views
5

有没有办法在白天开始时使用C或Objective-C来获取特定日期(方式)?使用Objective-C/C查找夏令时(夏令时)时间戳?

在墨西哥,夏令时开始于4月第一个星期日凌晨2:00,并在凌晨2:00结束在十月最后一个星期日。在许多POSIX系统中,这被写成

M4.1.0/2,M10.5.0/2 
(Begins: Month 4, 1st Sunday at 02:00AM, Ends: Month 10, last Sunday at 02:00AM) 

我知道这是可能知道,如果夏令是使用

NSTimeZone* systemTimeZone = [NSTimeZone systemTimeZone]; 
BOOL dstIsOn = [systemTimeZone isDaylightSavingTime]; 

当前活动,并且它可能得到的时间,直到下一个Daylight Savings开始

NSTimeZone* systemTimeZone = [NSTimeZone systemTimeZone]; 
NSTimeInterval delta = [systemTimeZone daylightSavingTimeOffset]; 

但是:我将如何去寻找特定的一天,所以夏令时开始/结束?

有一些杀手的表,在那里,我一直没能找到?

任何帮助将不胜感激!

+0

仅供参考,在美国,我们的夏令时每个环节现在都扩展了大约3周。 – 2013-03-18 09:52:49

+0

@CarlVeazey你确实是对的。如果将国家更改为梅捷科,如果他们观察到夏令时,将会很乐意将其改为哈萨克斯坦的光荣国家。 – Groot 2013-03-18 10:03:16

回答

8

是的,有 - 你可以使用[NSTimeZone nextDaylightSavingTimeTransitionAfterDate:]方法。这将返回一个NSDate,您可以使用它daylightSavingTimeOffsetForDate来确定偏移量。

通常你会用它来寻找下一个偏移量,但你可以明显地运行它不止一次不同日期以获得一系列即将到来的夏令时更改。还有一种方便的方法nextDaylightSavingTimeTransition,它总是会返回下一个转换。

+0

会试试看,谢谢! – Groot 2013-03-18 10:20:59

+0

请记住,DST规则更频繁地更改,然后Apple发布iOS更新。所以来自NSTimeZone方法的日期可能已过时。在我们的项目中,我们使用“杀手表”(手动更新)。 – Jeepston 2013-03-18 10:40:02

+0

@杰普斯顿是的,我意识到这一点......我碰巧并不幸运,因此你的杀手锏可以争夺。 ;) – Groot 2013-03-18 11:21:41