问题:Python日期时间到没有微秒组件的字符串
我正在将UTC时间字符串添加到当前仅包含Amsterdam(!)时间字符串的Bitbucket API响应中。为了与其他地方返回的UTC时间字符串保持一致,请使用所需的格式2011-11-03 11:07:04
(后跟+00:00
,但这不是紧密联系)。
什么是创建这样一个字符串(最好的方式,而不从一微秒组件)datetime
的实例与微秒组成部分?
>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026
我会添加出现在我身上的最佳选择作为可能的答案,但是可能会有更优雅的解决方案。
编辑:我应该提一下,我实际上并不是在打印当前时间-我曾经datetime.now
提供一个简单的例子。因此,该解决方案不应假定datetime
其接收到的任何实例都将包含微秒组件。
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(datetime.datetime.now())
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 datetime.now
to provide a quick example. So the solution should not assume that any datetime
instances it receives will include microsecond components.
回答 0
如果要以datetime
不同于标准格式的特定格式格式化对象,则最好明确指定该格式:
>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'
有关指令的说明,请参见的文档datetime.strftime()
%
。
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:
>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'
See the documentation of datetime.strftime()
for an explanation of the %
directives.
回答 1
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
回答 2
回答 3
这就是我做到的方式。ISO格式:
import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Returns: '2017-01-23T14:58:07'
如果您不想使用ISO格式,则可以替换为’T’:
datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'
This is the way I do it. ISO format:
import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Returns: '2017-01-23T14:58:07'
You can replace the ‘T’ if you don’t want ISO format:
datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'
回答 4
另一个选择:
>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 11:31:28'
默认情况下,这使用本地时间,如果您需要UTC,则可以使用以下时间:
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'
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'
回答 5
通过切片保留所需的前19个字符:
>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'
Keep the first 19 characters that you wanted via slicing:
>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'
回答 6
我通常这样做:
import datetime
now = datetime.datetime.now()
now = now.replace(microsecond=0) # To print now without microsecond.
# To print now:
print(now)
输出:
2019-01-13 14:40:28
I usually do:
import datetime
now = datetime.datetime.now()
now = now.replace(microsecond=0) # To print now without microsecond.
# To print now:
print(now)
output:
2019-01-13 14:40:28
回答 7
由于并非所有datetime.datetime
实例都具有微秒成分(即当它为零时),因此可以将字符串划分为“”。并只取第一项,它将始终有效:
unicode(datetime.datetime.now()).partition('.')[0]
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:
unicode(datetime.datetime.now()).partition('.')[0]
回答 8
我们可以尝试如下
import datetime
date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
We can try something like below
import datetime
date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
回答 9
我发现这是最简单的方法。
>>> t = datetime.datetime.now()
>>> 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'
>>>
I found this to be the simplest way.
>>> t = datetime.datetime.now()
>>> 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'
>>>
回答 10
我之所以使用它,是因为我可以更好地理解并记住它(日期时间格式也可以根据您的选择进行自定义):-
import datetime
moment = datetime.datetime.now()
print("{}/{}/{} {}:{}:{}".format(moment.day, moment.month, moment.year,
moment.hour, moment.minute, moment.second))
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 = datetime.datetime.now()
print("{}/{}/{} {}:{}:{}".format(moment.day, moment.month, moment.year,
moment.hour, moment.minute, moment.second))