Pradeep Reddy Kypa
Pradeep Reddy Kypa

Reputation: 4022

How to convert NSTimeInterval to int?

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.

Upvotes: 39

Views: 77854

Answers (6)

Rafał Sroka
Rafał Sroka

Reputation: 40030

Swift 4, Swift 5

I simply cast to Int64:

Int64(Date().timeIntervalSince1970)

Upvotes: 2

Duncan C
Duncan C

Reputation: 131398

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

Upvotes: 6

AP_
AP_

Reputation: 1033

In Swift 3.0

let timestamp = round(NSDate().timeIntervalSince1970)

enter image description here

Upvotes: 7

Justin Domnitz
Justin Domnitz

Reputation: 3307

I had a need to store an NSDate in a Swift Number. I used the following cast which is working great.

Double(startDateTime.timeIntervalSince1970)

Upvotes: -2

Aaron Hayman
Aaron Hayman

Reputation: 8502

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

Upvotes: 71

Emil Vikström
Emil Vikström

Reputation: 91902

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!

Upvotes: 8

Related Questions