2013-11-23 8 views
0

Я делаю таймер обратного отсчета, и я хочу, чтобы он обратился к глобальному обратному отсчету до Рождества. Поэтому у меня есть значение timestamp 1387929600, которое составляет 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" с момента времени, когда он будет равен нулю с момента его текущего часового пояса.

Правильно ли я это говорю? Мне может быть что-то упущено в расчете, и, возможно, мне нужно добавить номер метки, но я не уверен.

Любая помощь была бы принята с благодарностью.

+2

С каких это пор Рождество начиналось в полдень плюс одна секунда? Рождество начинается с 25 декабря, 00:00:00. –

+0

извините за вашу опечатку. Я думал, что AM. Правильная отметка времени – Inovize

ответ

1

К добавив tzВведение в временную метку в GMT вы удваиваете эффект разницы во времени, вместо того чтобы отменить его.

Например, если ваш часовой пояс составляет 25200 секунд позади GMT (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]; 
Смежные вопросы