1

How can I convert a decimal representation of a day in the year to a timestamp with all the parts, both the full date and the time?

For example, my first decimal is 22.968530853511766 and I want it in a nice timestamp format.

Mariusz Jamro
  • 30,615
  • 24
  • 120
  • 162

1 Answers1

10

Use a timedelta() object with your value as the days parameter; add it to midnight December 31st of the previous year:

from datetime import datetime, timedelta

epoch = datetime(datetime.now().year - 1, 12, 31)
result = epoch + timedelta(days=your_decimal)

Demo:

>>> from datetime import datetime, timedelta
>>> epoch = datetime(datetime.now().year - 1, 12, 31)
>>> epoch + timedelta(days=22.968530853511766)
datetime.datetime(2015, 1, 22, 23, 14, 41, 65743)
>>> print(epoch + timedelta(days=22.968530853511766))
2015-01-22 23:14:41.065743

A datetime object can be formatted any number of ways with the datetime.strftime() method; I relied on the default str() conversion as called by print() in the demo.

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
  • or `datetime(datetime.now().year, 1, 1) + timedelta(days)`. It is not clear whether "decimal day of the year" is `0`-based. It seems we already had this conversation. – jfs May 28 '15 at 06:46