Преобразование секунд временной метки Unix в миллисекунды

Я знаю, что на этот вопрос уже много раз отвечали, например:

  1. здесь
  2. здесь
  3. здесь
  4. и больше

но это дерьмо не работает, и я понятия не имею, почему. Это то, что я уже сделал:

//First try
int currentTime  = [[NSDate date] timeIntervalSince1970] *-1000;
//Second try
int currentTime  = [[NSDate date] timeIntervalSince1970];
NSInteger milliseconds      = currentTime*1000;
//Third try
float currentTime  = [[NSDate date] timeIntervalSince1970];
currentTime  = currentTime * 1000;
//Fourth try
long currentTime  = [[NSDate date] timeIntervalSince1970];
currentTime  = currentTime * 1000;

Но это всегда печатает что-то совершенно другое, например 260694392. Когда я просто делаю

float currentTime  = [[NSDate date] timeIntervalSince1970];

Это дает мне правильное время в секундах, но теперь я также хочу умножить его на 1000, чтобы получить его в миллисекундах.


person Musterknabe    schedule 20.12.2013    source источник
comment
Почему бы вам не использовать NSTimeInterval для получения и сохранения требуемого значения?   -  person Akshat Singhal    schedule 20.12.2013
comment
Миллисекунды с 1970 года слишком велики, чтобы поместиться в 32-битное целое число, для этого требуется около 39 бит.   -  person Barmar    schedule 20.12.2013
comment
Так как же тогда лучше хранить миллисекунды? И как бы я это сделал? Как видите, я также пробовал использовать int, float, nsinteger и long. @AkshatSinghal, как мне использовать NSTimeInterval в сочетании с миллисекундами?   -  person Musterknabe    schedule 20.12.2013
comment
uint64 должен быть достаточно длинным.   -  person Larme    schedule 20.12.2013
comment
Или просто используйте NSNumber. Он позаботится обо всем. NSNumber *msec = @(currentTime*1000);   -  person Ivan Genchev    schedule 20.12.2013
comment
Я попробовал это с помощью NSNumber, но все равно выводит что-то вроде этого 262555392 В чем проблема??   -  person Musterknabe    schedule 20.12.2013
comment
uint64_t сработало! Спасибо Иван!   -  person Musterknabe    schedule 20.12.2013
comment
Вы также должны использовать NSTimeInterval, как предложили другие. В конце концов, timeInterval... возвращает NSTimeInterval, который typedef записывается как double, а на самом деле double достаточно большой, чтобы содержать и это значение. См. это: developer.apple .com/library/ios/documentation/General/. Это 8 байт как на 32, так и на 64 бит.   -  person Ivan Genchev    schedule 20.12.2013