我正在制作一个倒数计时器,我希望它能全球倒计时到圣诞节。因此,我的时间戳值为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"
,此时它应该是自当前时区以来的零。
我说的是对的吗?我可能在计算中遗漏了一些东西,也许我必须添加时间戳号码,但我不确定。
非常感谢任何帮助。
答案 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];