6

I am trying to convert a datestamp of now into Unix TimeStamp, however the code below seems to be hit but then just jumps to the end of my app, as in seems to not like the time.mktime part.

from datetime import datetime
import time

now = datetime.now()
toDayDate = now.replace(hour=0, minute=0, second=0, microsecond=0)
newDate = time.mktime(datetime.strptime(toDayDate, "%Y-%m-%d %H:%M:%S").timetuple())
print(newDate)
mtt2p
  • 1,818
  • 1
  • 15
  • 22
user3182518
  • 217
  • 4
  • 6
  • 13
  • add a `*`: `time.mktime(*date...` – thebjorn Feb 27 '17 at 16:45
  • 2
    `strptime` parses a date string based on the format spec -- `toDayDate` is not a date string, it's a date so you shouldn't need to be parsing anything there ... – mgilson Feb 27 '17 at 16:47
  • Possible duplicate of [Convert Python date to Unix timestamp](https://stackoverflow.com/questions/29298677/convert-python-date-to-unix-timestamp) – Martin Thoma Dec 06 '17 at 10:26

2 Answers2

13

Change

newDate = time.mktime(datetime.strptime(toDayDate, "%Y-%m-%d %H:%M:%S").timetuple())

to

newDate = time.mktime(datetime.timetuple())

as an example I did:

from datetime import datetime
from time import mktime
t = datetime.now()
unix_secs = mktime(t.timetuple())

and got unix_secs = 1488214742.0

Credit to @tarashypka- use t.utctimetuple() if you want the result in UTC (e.g. if your datetime object is aware of timezones)

Dillanm
  • 876
  • 12
  • 28
12

You could use datetime.timestamp() in Python 3 to get the POSIX timestamp instead of using now().

The value returned is of type float. timestamp() relies on datetime which in turn relies on mktime(). However, datetime.timestamp() supports more platforms and has a wider range of values.

PeskyPotato
  • 670
  • 8
  • 20