Как преобразовать 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;

Остерегайтесь переполнения, хотя!

В Swift 3.0

let timestamp = round(NSDate().timeIntervalSince1970)

Я подозреваю, что значения 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)
Другие вопросы по тегам