tags:

views:

539

answers:

4

I've been trying to find a way to get the time since 1970-01-01 00:00:00 UTC in seconds and nanoseconds in python and I cannot find anything that will give me the proper precision.

I have tried using time module, but that precision is only to microseconds, so the code I tried was:

import time

print time.time()

which gave me a result like this:

1267918039.01

However, I need a result that looks like this:

1267918039.331291406

Does anyone know a possible way to express UNIX time in seconds and nanoseconds? I cannot find a way to set the proper precision or get a result in the correct format. Thank you for any help

+2  A: 

It is unlikely that you will actually get nanosecond precision from any current machine.

The machine can't create precision, and displaying significant digits where not appropriate is not The Right Thing To Do.

janm
A: 

I don't think there's a platform-independent way (maybe some third party has coded one, but I can't find it) to get time in nanoseconds; you need to do it in a platform-specific way. For example, this SO question's answer shows how to do it on platform that supply a librt.so system library for "realtime" operations.

Alex Martelli
+1  A: 

Your precision is just being lost due to string formatting:

>>> import time
>>> print "%.20f" % time.time()
1267919090.35663390159606933594
MattH
Actually I can imagine that it is accurate to so many decimal places, but there is precision! :)
MattH
+3  A: 

The problem is probably related to your OS, not Python. See the documentation of the time module: http://docs.python.org/library/time.html

time.time()

Return the time as a floating point number expressed in seconds since the epoch, in UTC. Note that even though the time is always returned as a floating point number, not all systems provide time with a better precision than 1 second. While this function normally returns non-decreasing values, it can return a lower value than a previous call if the system clock has been set back between the two calls.

In other words: if your OS can't do it, Python can't do it. You can multiply the return value by the appropriate order of magnitude in order to get the nanosecond value, though, imprecise as it may be.

EDIT: The return is a float variable, so the number of digits after the comma will vary, whether your OS has that level of precision or not. You can format it with "%.nf" where n is the number of digits you want, though, if you want a fixed point string representation.

Alan