Sjaak Rusma
Sjaak Rusma

Reputation: 1434

Get current time in milliseconds

I am trying to do an API call which requires a time in milliseconds. I am pretty new in R and been Googling for hours to achieve something like what In Java would be:

System.currentTimeMillis();

Only thing i see is stuff like

Sys.Date() and Sys.time

which returns a formatted date instead of time in millis.

I hope someone can give me a oneliner which solves my problem.

Upvotes: 26

Views: 29589

Answers (3)

cakraww
cakraww

Reputation: 2757

To get current epoch time (in second):

as.numeric(Sys.time())

If you want to get the time difference (for computing duration for example), just subtract Sys.time() directly and you will get nicely formatted string:

currentTs <- Sys.time()
# about five seconds later
elapsed <- Sys.time() - currentTs
print(elapsed)    # Time difference of 4.926194 secs

Upvotes: 3

Joshua Ulrich
Joshua Ulrich

Reputation: 176648

Sys.time does not return a "formatted time". It returns a POSIXct classed object, which is the number of seconds since the Unix epoch. Of course, when you print that object, it returns a formatted time. But how something prints is not what it is.

To get the current time in milliseconds, you just need to convert the output of Sys.time to numeric, and multiply by 1000.

R> print(as.numeric(Sys.time())*1000, digits=15)
[1] 1476538955719.77

Depending on the API call you want to make, you might need to remove the fractional milliseconds.

Upvotes: 45

Maurits Evers
Maurits Evers

Reputation: 50668

No need for setting the global variable digits.secs. See strptime for details.

# Print milliseconds of current time
# See ?strptime for details, specifically
# the formatting option %OSn, where 0 <= n <= 6 
as.numeric(format(Sys.time(), "%OS3")) * 1000

Upvotes: 6

Related Questions