2009-10-31 2 views
2

Я действительно работаю с fbconnect, и я пытаюсь получить unix-время, которое представляет месяц назад. Я очень смущен этим с 1970 года. Потому что какой-то орган дает мне точку в правильном направлении?iPhone Dev: Работа с временем unix?

+0

Какая часть 1970 года вас сбивает с толку? –

+0

Извините, я в основном путаюсь, как представлять время с 1970 года или рассчитать его, но на мой вопрос был дан ответ. – TheGambler

ответ

6

С Unix epoch, время «0» - полночь 1 января 1970 года. Каждую секунду с тех пор была добавлена ​​еще одна секунда; время прямо сейчас, когда я пишу это:

>>> import time 
>>> time.time() 
1257023557.94208 

Большинство систем связи с использованием эпохи Unix, потому что это легко, де-факто стандартом и позволяет целочисленную арифметику. Вы можете получить NSTimeInterval представляющий время с момента эпохи от NSDate как это:

NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970]; 

NSTimeInterval просто дважды. Если вы хотите, целое число - который я представляю fbconnect нужно - просто преобразовать его (непроверенные):

NSString *strtimestamp = [NSString stringWithFormat:"%u", [timestamp unsignedIntegerValue]]; 

Помните, что это просто счетчик. Вы можете вычесть час, вычитая 3600 (60 * 60), добавить день, добавив 86400 (24 * 60 * 60) и т. Д .; однако в вашем случае лучше начать с NSDate, представляющего определенное время, которое вы хотите, и позволить библиотеке выполнить арифметику для вас.

NSDate, вероятно, всего лишь обертка вокруг этих временных меток.

+1

Обратите внимание, что переход на летнее время, секунды прыжка и т. Д. Делают простое добавление и вычитание секунд проблематичным в этих случаях. Если ваше приложение не зависит от них, отлично, но если ему необходимо правильно их обработать, рекомендуется использовать библиотеку, которая имеет дело с ними. – ceejayoz

+0

однако, как только вы выходите за пределы дней, когда выполняете арифметику календаря, все становится намного сложнее (разные дни в месяц, високосные годы, часовые пояса, летнее время). Используйте библиотечные процедуры, чтобы выяснить, когда в прошлом месяце. –

+0

@ceejayoz: Нет, это не так. Временные метки Unix никогда не учитывали их, поэтому в «реальном времени» есть несколько раз, которые были представлены той же самой временной отметкой Unix (последняя в 2006 году, IIRC?). Дневная экономия также не учитывает временные метки Unix, так как они являются агностиками часовых поясов (это секунды с момента, не более того). Поэтому арифметика, которую я представляю, работает в каждом случае для временных меток Unix. –

Смежные вопросы