时区计算问题

时间:2013-11-23 05:58:31

标签: ios objective-c nsdate

我正在制作一个倒数计时器,我希望它能全球倒计时到圣诞节。因此,我的时间戳值为1387929600,即dec 25 00:00:00。我根据不同的时区调整该值,我这样做:

NSDate *firstDate = [NSDate dateWithTimeIntervalSince1970:1387954801];

    NSTimeZone *tz = [NSTimeZone localTimeZone];

    int tzInt = [tz secondsFromGMTForDate:firstDate];

    int timeDifference = tzInt+1387954801;

    xmasDate = [NSDate dateWithTimeIntervalSince1970:timeDifference];

我选择firstDate并执行secondsFromGMTForDate,然后将其添加到原始时间戳编号,以便为时区调整xmasDate

这种一般方法似乎有效,但secondsFromGMTForDate无法正确计算。

例如,当我将手机设置为当前时区时,它仍然希望从时间戳时间中减去"-25200",此时它应该是自当前时区以来的零。

我说的是对的吗?我可能在计算中遗漏了一些东西,也许我必须添加时间戳号码,但我不确定。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

通过 tzInt添加到GMT中的时间戳,您可以将时区差异的效果加倍,而不是取消它。

例如,如果您的时区比GMT晚25200秒(tzInt = -25200),则需要添加25200到1387929600,因为圣诞节将在您的时区稍后出现。 所以timeDifference的正确计算如下:

int timeDifference = 1387954801 - tzInt;

否则代码看起来是正确的,但我会使用以下代码,我认为这更容易理解:

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:25];
[components setMonth:12];
[components setYear:2013];
NSDate *xmasDate = [[NSCalendar currentCalendar] dateFromComponents:components];

NSTimeInterval secondsLeft = [xmasDate timeIntervalSinceNow];