Python datetime to string without microsecond component


I’m adding UTC time strings to Bitbucket API responses that currently only contain Amsterdam (!) time strings. For consistency with the UTC time strings returned elsewhere, the desired format is 2011-11-03 11:07:04 (followed by +00:00, but that’s not germane).

What’s the best way to create such a string (without a microsecond component) from a datetime instance with a microsecond component?

>>> import datetime
>>> print unicode(
2011-11-03 11:13:39.278026

I’ll add the best option that’s occurred to me as a possible answer, but there may well be a more elegant solution.

Edit: I should mention that I’m not actually printing the current time – I used to provide a quick example. So the solution should not assume that any datetime instances it receives will include microsecond components.

Asked By: davidchambers



>>> import datetime
>>> now =
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
Answered By: davidchambers

If you want to format a datetime object in a specific format that is different from the standard format, it’s best to explicitly specify that format:

>>> import datetime
>>>"%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'

See the documentation of datetime.strftime() for an explanation of the % directives.

Answered By: Sven Marnach

Yet another option:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 11:31:28'

By default this uses local time, if you need UTC you can use the following:

>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'
Answered By: Andrew Clark

Keep the first 19 characters that you wanted via slicing:

>>> str([:19]
'2011-11-03 14:37:50'
Answered By: Steven Rumbalski

Since not all datetime.datetime instances have a microsecond component (i.e. when it is zero), you can partition the string on a “.” and take only the first item, which will always work:

Answered By: Austin Marshall

In Python 3.6:

from datetime import datetime' ', 'seconds')
'2017-01-11 14:41:33'

Answered By: codeif

This is the way I do it. ISO format:

import datetime
# Returns: '2017-01-23T14:58:07'

You can replace the ‘T’ if you don’t want ISO format:' ')
# Returns: '2017-01-23 15:05:27'
Answered By: radtek

We can try something like below

import datetime

date_generated =
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
Answered By: Abhishek Bajaj

I found this to be the simplest way.

>>> t =
>>> t
datetime.datetime(2018, 11, 30, 17, 21, 26, 606191)
>>> t = str(t).split('.')
>>> t
['2018-11-30 17:21:26', '606191']
>>> t = t[0]
>>> t
'2018-11-30 17:21:26'
Answered By: Muhammed Irfan

I usually do:

import datetime
now =
now = now.replace(microsecond=0)  # To print now without microsecond.

# To print now:


2019-01-13 14:40:28
Answered By: An0n

This I use because I can understand and hence remember it better (and date time format also can be customized based on your choice) :-

import datetime
moment =
print("{}/{}/{} {}:{}:{}".format(, moment.month, moment.year,
                                 moment.hour, moment.minute, moment.second))
Answered By: satyakam shashwat

As of Python 3.6+, the best way of doing this is by the new timespec argument for isoformat.

isoformat(timespec='seconds', sep=' ')


>>>'seconds', sep=' ')
'2020-10-16 18:38:35'
Answered By: craymichael
>>> from datetime import datetime
>>> dt ="%Y-%m-%d %X")
>>> print(dt)
'2021-02-05 04:10:24'
Answered By: Sommelier

Current TimeStamp without microsecond component:

timestamp = list(str(datetime.timestamp('.'))[0]
Answered By: Anmar Ghazi

You can also use the following method

import datetime as _dt

ts =
print("TimeStamp without microseconds: ", int(ts)) #TimeStamp without microseconds:  1629275829

dt =
print("Date & Time without microseconds: ", str(dt)[0:-7]) #Date & Time without microseconds:  2021-08-18 13:07:09

f-string formatting

>>> import datetime
>>> print(f'{ %H:%M:%S}')
2021-12-01 22:10:07
Answered By: codeye
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.