Get current date in milliseconds

Objective CCocoa TouchIosDateTime

Objective C Problem Overview


Can any one give me an idea how to get the current date in milliseconds?

Objective C Solutions


Solution 1 - Objective C

There are several ways of doing this, although my personal favorite is:

CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();

You can read more about this method here. You can also create a NSDate object and get time by calling timeIntervalSince1970 which returns the seconds since 1/1/1970:

NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];

And in Swift:

let timeInSeconds: TimeInterval = Date().timeIntervalSince1970

Solution 2 - Objective C

Casting the NSTimeInterval directly to a long overflowed for me, so instead I had to cast to a long long.

long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);

The result is a 13 digit timestamp as in Unix.

Solution 3 - Objective C

NSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000);

Solution 4 - Objective C

You can just do this:

long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);

this will return a value en milliseconds, so if you multiply the resulting value by 1000 (as suggested my Eimantas) you'll overflow the long type and it'll result in a negative value.

For example, if I run that code right now, it'll result in

currentTime = 1357234941

and

currentTime /seconds / minutes / hours / days = years
1357234941 / 60 / 60 / 24 / 365 = 43.037637652207

Solution 5 - Objective C

extension NSDate {

    func toMillis() -> NSNumber {
        return NSNumber(longLong:Int64(timeIntervalSince1970 * 1000))
    }

    static func fromMillis(millis: NSNumber?) -> NSDate? {
        return millis.map() { number in NSDate(timeIntervalSince1970: Double(number) / 1000)}
    }

    static func currentTimeInMillis() -> NSNumber {
        return NSDate().toMillis()
    }
}

Solution 6 - Objective C

@JavaZava your solution is good, but if you want to have a 13 digit long value to be consistent with the time stamp formatting in Java or JavaScript (and other languages) use this method:

NSTimeInterval time = ([[NSDate date] timeIntervalSince1970]); // returned as a double
long digits = (long)time; // this is the first 10 digits
int decimalDigits = (int)(fmod(time, 1) * 1000); // this will get the 3 missing digits
long timestamp = (digits * 1000) + decimalDigits;

or (if you need a string):

NSString *timestampString = [NSString stringWithFormat:@"%ld%d",digits ,decimalDigits];

Solution 7 - Objective C

As mentioned before, [[NSDate date] timeIntervalSince1970] returns an NSTimeInterval, which is a duration in seconds, not milli-seconds.

You can visit https://currentmillis.com/ to see how you can get in the language you desire. Here is the list -

ActionScript	(new Date()).time
C++	std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count()
C#.NET	DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
Clojure	(System/currentTimeMillis)
Excel / Google Sheets*	= (NOW() - CELL_WITH_TIMEZONE_OFFSET_IN_HOURS/24 - DATE(1970,1,1)) * 86400000
Go / Golang	time.Now().UnixNano() / 1000000
Hive*	unix_timestamp() * 1000
Java / Groovy / Kotlin	System.currentTimeMillis()
Javascript	new Date().getTime()
MySQL*	UNIX_TIMESTAMP() * 1000
Objective-C	(long long)([[NSDate date] timeIntervalSince1970] * 1000.0)
OCaml	(1000.0 *. Unix.gettimeofday ())
Oracle PL/SQL*	SELECT (SYSDATE - TO_DATE('01-01-1970 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) * 24 * 60 * 60 * 1000 FROM DUAL
Perl	use Time::HiRes qw(gettimeofday); print gettimeofday;
PHP	round(microtime(true) * 1000)
PostgreSQL	extract(epoch FROM now()) * 1000
Python	int(round(time.time() * 1000))
Qt	QDateTime::currentMSecsSinceEpoch()
R*	as.numeric(Sys.time()) * 1000
Ruby	(Time.now.to_f * 1000).floor
Scala	val timestamp: Long = System.currentTimeMillis
SQL Server	DATEDIFF(ms, '1970-01-01 00:00:00', GETUTCDATE())
SQLite*	STRFTIME('%s', 'now') * 1000
Swift*	let currentTime = NSDate().timeIntervalSince1970 * 1000
VBScript / ASP	offsetInMillis = 60000 * GetTimeZoneOffset()
WScript.Echo DateDiff("s", "01/01/1970 00:00:00", Now()) * 1000 - offsetInMillis + Timer * 1000 mod 1000

For objective C I did something like below to print it -

long long mills = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
 NSLog(@"Current date %lld", mills);

Hopw this helps.

Solution 8 - Objective C

Cconvert NSTimeInterval milisecondedDate value to nsstring and after that convert into int.

Solution 9 - Objective C

You can use following methods to get current date in milliseconds.

[[NSDate date] timeIntervalSince1970];

OR

double CurrentTime = CACurrentMediaTime(); 

Source: https://stackoverflow.com/questions/358207/iphone-how-to-get-current-milliseconds

Solution 10 - Objective C

- (void)GetCurrentTimeStamp
    {
        NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
        [objDateformat setDateFormat:@"yyyy-MM-dd"];
        NSString    *strTime = [objDateformat stringFromDate:[NSDate date]];
        NSString    *strUTCTime = [self GetUTCDateTimeFromLocalTime:strTime];//You can pass your date but be carefull about your date format of NSDateFormatter.
        NSDate *objUTCDate  = [objDateformat dateFromString:strUTCTime];
        long long milliseconds = (long long)([objUTCDate timeIntervalSince1970] * 1000.0);

        NSString *strTimeStamp = [NSString stringWithFormat:@"%lld",milliseconds];
        NSLog(@"The Timestamp is = %@",strTimeStamp);
    }

 - (NSString *) GetUTCDateTimeFromLocalTime:(NSString *)IN_strLocalTime
    {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSDate  *objDate    = [dateFormatter dateFromString:IN_strLocalTime];
        [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
        NSString *strDateTime   = [dateFormatter stringFromDate:objDate];
        return strDateTime;
    }

Solution 11 - Objective C

Use this to get the time in milliseconds (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]).

Solution 12 - Objective C

An extension on date is probably the best way to about it.

extension NSDate {
    func msFromEpoch() -> Double {
        return self.timeIntervalSince1970 * 1000
    }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsivaView Question on Stackoverflow
Solution 1 - Objective CPawelView Answer on Stackoverflow
Solution 2 - Objective CwileymabView Answer on Stackoverflow
Solution 3 - Objective CEimantasView Answer on Stackoverflow
Solution 4 - Objective CJavaZavaView Answer on Stackoverflow
Solution 5 - Objective CSiamasterView Answer on Stackoverflow
Solution 6 - Objective CItai HanskiView Answer on Stackoverflow
Solution 7 - Objective CAniket ThakurView Answer on Stackoverflow
Solution 8 - Objective CvikashView Answer on Stackoverflow
Solution 9 - Objective CMuhammad Nabeel ArifView Answer on Stackoverflow
Solution 10 - Objective CVickyView Answer on Stackoverflow
Solution 11 - Objective CTanvi JainView Answer on Stackoverflow
Solution 12 - Objective CjoslinmView Answer on Stackoverflow