61

When attempting to convert a float formatted timestamp e.g 1437506779950.0 into a datetime object, I'm getting a ValueError "year is out of range".

This code that I used, was working not 3 months ago. Revisiting it now, strangely is now throwing this error yet nothing in the code base has changed, only the data that is being passed to it, and the only data that has changed there is obviously the timestamp.

>>> f = 1437506779950.0
>>> datetime.datetime.fromtimestamp(float(f))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: year is out of range

I can't understand what would have changed to make this break?

3
  • 5
    See this question. Are you perhaps not converting from milliseconds to seconds? Commented Jul 21, 2015 at 19:45
  • Are you sure that was the exact value that was working 3 months ago? even this - f = 143750677995.0 (your number divided by 10) lands me in the year 6525 . Commented Jul 21, 2015 at 19:48
  • samalamma708: you might want to put that as the answer, seems that was the issue. Commented Jul 21, 2015 at 19:49

1 Answer 1

140

As noted in the answer for this question, this looks like a unit conversion issue. You have to divide your timestamp by 1000 to convert from milliseconds to seconds.

In Python 2, if you want to preserve millisecond precision, instead divide by 1000.0. In Python 3, you will preserve it anyway dividing by 1000 or 1000.0.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.