Как преобразовать NSTimeInterval в int?
Как мне преобразовать NSTimeInterval в целочисленное значение?
Мой TimeInterval содержит значение 83.01837
, Мне нужно конвертировать в 83
, Я погуглил, но не смог найти никакой помощи.
5 ответов
Прямое назначение:
NSTimeInterval interval = 1002343.5432542;
NSInteger time = interval;
//time is now equal to 1002343
NSTimeInterval является двойным, поэтому, если вы назначите его непосредственно NSInteger (или int, если хотите), он будет работать. Это сократит время с точностью до секунды.
Если вы хотите округлить до ближайшей секунды (а не отрезать), вы можете использовать округление перед выполнением задания:
NSTimeInterval interval = 1002343.5432542;
NSInteger time = round(interval);
//time is now equal to 1002344
Согласно документации, NSTimeInterval
это просто double
:
typedef double NSTimeInterval;
Вы можете привести это к int
:
seconds = (int) myTimeInterval;
Остерегайтесь переполнения, хотя!
Я подозреваю, что значения NSTimeInterval из NSDate будут переполнять NSInteger. Вы, вероятно, хотели бы долго долго. (64-битное целое.) Они могут хранить большие целочисленные значения (от 2 ^ 63 до 2^63 -1)
long long integerSeconds = round([NSDate timeIntervalSinceReferenceDate]);
РЕДАКТИРОВАТЬ:
Похоже, что NSInteger МОЖЕТ хранить NSTimeInterval, по крайней мере, в течение следующих нескольких десятилетий. Время текущей даты timeIntervalSinceReferenceDate составляет около 519 600 000 или около 2^28. На 32-разрядном устройстве NSInteger может содержать значение от -2 ^ 31 до 2^31-1. (2^31 составляет 2 147 483 648
Свифт 4, Свифт 5
Я просто бросил Int64
:
Int64(Date().timeIntervalSince1970)
У меня была необходимость хранить NSDate в Свифт-номере. Я использовал следующий актерский состав, который отлично работает.
Double(startDateTime.timeIntervalSince1970)