Prithviraj Mitra
Prithviraj Mitra

Reputation: 11852

Removing milliseconds from datetime object in Python

I am trying to remove the milliseconds(28109) from this string 2017-09-12 22:33:55.28109 in Python.

code:

import datetime as dt
from datetime import date,datetime

created_date = datetime.fromtimestamp(ctime)
d=datetime.strptime(created_date, "%Y-%m-%d %H:%M:%S.%fZ")
created_date = datetime.strftime(d, "%m/%d/%Y %I:%M:%S %p")
print(created_date)

Error:

`d=datetime.strptime(created_date, "%Y-%m-%d %H:%M:%S.%fZ")`

TypeError: must be str, not datetime.datetime

Upvotes: 2

Views: 17911

Answers (2)

Rolf of Saxony
Rolf of Saxony

Reputation: 22448

You can use time as well to achieve what you want.

import time
ctime = "2017-09-12 22:33:55.28109"
x = time.strptime(ctime.split('.')[0],'%Y-%m-%d %H:%M:%S')
x = time.strftime('%m/%d/%Y %I:%M:%S %p', x)
print (x)

'09/12/2017 10:33:55 PM'

Upvotes: 0

Martijn Pieters
Martijn Pieters

Reputation: 1125058

You already have a datetime object, you do not need to parse it again. The datetime.fromtimestamp() call was enough.

Remove the datetime.strptime() line.

created_date = datetime.fromtimestamp(ctime)
created_date = created_date.strftime("%m/%d/%Y %I:%M:%S %p")
print(created_date)

I also changed your strftime() call, it is a method, you just call it on the datetime object you have.

I suspect that you printed the return value of the datetime.fromtimestamp() call, and got confused. The str() conversion of a datetime() instance formats the value as a ISO 8601 string. Note that even if you did have a string, you used the wrong format (there is no timezone in that string, so %Z does not apply).

If you needed a datetime object, rather than a formatted string, you could also just have converted your timestamp to an integer; the microseconds are captured in the decimal portion of the timestamp:

>>> ctime = 1505252035.28109
>>> datetime.fromtimestamp(ctime)
datetime.datetime(2017, 9, 12, 22, 33, 55, 281090)
>>> datetime.fromtimestamp(int(ctime))
datetime.datetime(2017, 9, 12, 22, 33, 55)
>>> print(_)
2017-09-12 22:33:55

Upvotes: 5

Related Questions