How to convert NSTimeInterval to int?

73,540

Solution 1

Direct assignment:

NSTimeInterval interval = 1002343.5432542;
NSInteger time = interval;
//time is now equal to 1002343

NSTimeInterval is a double, so if you assign it directly to a NSInteger (or int, if you wish) it'll work. This will cut off the time to the nearest second.

If you wish to round to the nearest second (rather than have it cut off) you can use round before you make the assignment:

NSTimeInterval interval = 1002343.5432542;
NSInteger time = round(interval);
//time is now equal to 1002344

Solution 2

According to the documentation, NSTimeInterval is just a double:

typedef double NSTimeInterval;

You can cast this to an int:

seconds = (int) myTimeInterval;

Watch out for overflows, though!

Solution 3

In Swift 3.0

let timestamp = round(NSDate().timeIntervalSince1970)

enter image description here

Solution 4

I suspect that NSTimeInterval values from NSDate would overflow an NSInteger. You'd likely want a long long. (64 bit integer.) Those can store honking-big integer values (-2^63 to 2^63 -1)

long long integerSeconds = round([NSDate timeIntervalSinceReferenceDate]);

EDIT:

It looks like an NSInteger CAN store an NSTimeInterval, at least for the next couple of decades. The current date's timeIntervalSinceReferenceDate is about 519,600,000, or about 2^28. On a 32 bit device, and NSInteger can hold a value from -2^31 to 2^31-1. (2^31 is 2,147,483,648

Solution 5

Swift 4, Swift 5

I simply cast to Int64:

Int64(Date().timeIntervalSince1970)
Share:
73,540
Pradeep Reddy Kypa
Author by

Pradeep Reddy Kypa

iOS Architect with a relevant experience of 13+ years. I want to master iOS SDK Technologies and very much interested to learn any new stuff regarding iOS.#SOreadytohelp

Updated on May 28, 2020

Comments

  • Pradeep Reddy Kypa
    Pradeep Reddy Kypa about 4 years

    How do I convert NSTimeInterval into an Integer value?

    My TimeInterval holds the value 83.01837. I need to convert it into 83. I have googled but couldn't find any help.

  • Richard J. Ross III
    Richard J. Ross III about 12 years
    Possibly want a round() call in there.
  • Aaron Hayman
    Aaron Hayman about 12 years
    hmmm...wouldn't it be better to just add .5 to interval? I know I'm really bickering here but the effect will be the same without using up a function call.
  • Richard J. Ross III
    Richard J. Ross III about 12 years
    Actually, round is better, seeing as it works properly with negative numbers as expected, whilst adding .5 or to the number doesn't...
  • Aaron Hayman
    Aaron Hayman about 12 years
    Ahh true enough...pesky negatives. :)
  • HereTrix
    HereTrix almost 8 years
    Double() doesn't create integeg value
  • prakash
    prakash over 7 years
    This will give you with the decimal point followed by 0. (83.01837--> 83.0)
  • AP_
    AP_ over 7 years
    Kindly check the attached screenshot @prakash