如何在Python中从datetime.now()获取分钟、秒和毫秒?

38
>>> a = str(datetime.now())
>>> a
'2012-03-22 11:16:11.343000'

我需要获取一个类似于这样的字符串:'16:11.34'

应该尽可能简洁。

或者我应该使用time()吗?如何获取它?


你的意思是要将它截断为 16:11.34,还是其他什么? - Nick Bastin
是的,截断或格式化或解析。我不知道。 - Prostak
1
@Marcin,我什么也没尝试过,因为我不知道该尝试什么。 - Prostak
也许应该写成你研究了什么... - hochl
8个回答

58

如下代码:

datetime.now().strftime('%M:%S.%f')[:-4]

我不确定你所说的“毫秒只有两位数”,但这应该将结果保留为2位小数。也许有一种更优雅的方法,可以通过修改strftime格式字符串来减少精度 -- 我不完全确定。

编辑

如果%f修饰符不起作用,你可以尝试类似以下的方法:

now=datetime.now()
string_i_want=('%02d:%02d.%d'%(now.minute,now.second,now.microsecond))[:-4]

我再次假设您只想截断精度。


'>>>datetime.now().strftime('%M:%S.%f')[:-4]' 的结果是空的,似乎有些不正确。 - Prostak
[:-4] 的意思是“从开头开始,排除最后 4 个字符”。出于某种原因,%f 在这里不起作用,我的最终结果是将 36:31.f 截断为 36:。@Prostak 也可能得到了截断的结果... - Izkata
2
有什么不正确的吗?它会引发错误吗?我认为 %f 修饰符是在 Python 2.6 中添加的(尽管我不确定) - 你使用的是哪个版本的 Python? - mgilson
我被限制在2.4.3版本。当我使用datetime.now().strftime('%M:%S.%f')[:-4]时,我得到了''。如果我使用datetime.now().strftime('%M:%S.f')[:-4],我得到了'46:' - Prostak
"%a %b %d/%m/%Y %H:%M:%S:%f " = 日期-月份缩写 日/月/年 小时 分钟 秒 毫秒 - Dennis Kioko
显示剩余4条评论

17

这个解决方案与@gdw2提供的解决方案非常相似,只是字符串格式化正确地匹配了您所要求的“应该尽可能简洁”。

>>> import datetime
>>> a = datetime.datetime.now()
>>> "%s:%s.%s" % (a.minute, a.second, str(a.microsecond)[:2])
'31:45.57'

关于方法 strftime(),我就是想不出毫秒的参数 datetime.now().strftime('%M:%S.??')。也许你知道吗? - Prostak
如果你必须使用strftime,那么@mgilson的解决方案似乎是你需要做的,即:datetime.datetime.now().strftime("%M:%S.%f")[:-4]以获得你所要求的确切格式。 >>>import datetime >>>datetime.datetime.now().strftime("%M:%S.%f")[:-4] '14:07.90' - Pythomania
但我不一定要使用strftime()……它只是提供了一行解决方案的其中之一。 - Prostak
1
在这种情况下,如果您不介意对datetime.now()进行三个不同的函数调用,您可以执行 >>> "%s:%s.%s" % (datetime.datetime.now().minute, datetime.datetime.now().second, str(datetime.datetime.now().microsecond)[:2]) '21:51.16' 这确实使调用datetime.now()变得多余,但我认为在这三个不同的函数调用中没有时间差异。如果我错了,请纠正我。 - Pythomania

4

如果您想让datetime.now()的精度达到分钟级别,可以使用以下代码:

datetime.strptime(datetime.now().strftime('%Y-%m-%d %H:%M'), '%Y-%m-%d %H:%M')

同样地,对于小时,它将是。
datetime.strptime(datetime.now().strftime('%Y-%m-%d %H'), '%Y-%m-%d %H')

这是一种折中的方法,如果有更好的解决方案,我十分乐意倾听。


3
import datetime from datetime

now = datetime.now()

print "%0.2d:%0.2d:%0.2d" % (now.hour, now.minute, now.second)

您可以在日和月等方面采取同样的操作。

3
另一个类似的解决方案:
>>> a=datetime.now()
>>> "%s:%s.%s" % (a.hour, a.minute, a.microsecond)
'14:28.971209'

是的,我知道我没有完美地处理字符串格式化。

关于方法 strftime(),我就是想不出毫秒的参数 datetime.now().strftime('%M:%S.??')。也许你知道吗? - Prostak
我会使用%d而不是%s,因为你正在处理整数值(digits)。 - NuclearPeon

0
要获取当前时间的分钟、秒和毫秒,您可以首先导入datetime模块。 然后使用datetime.datetime.now()定义一个对象。 接着,您可以使用该类的子函数来获取该对象的分钟、秒和毫秒。
import datetime
now = datetime.datetime.now()
print (now.year)
print (now.month)
print (now.day)
print (now.hour)
print (now.minute)
print (now.second)
print (now.microsecond)

你可以阅读更多关于她的资料https://docs.python.org/3/library/datetime.html#datetime.datetime.year


0

time.second 很有帮助,将其放在你的 Python 顶部。


-2

抱歉打开一个旧的线程,但我发帖只是为了帮助有需要的人。这似乎是在Python 3中实现此操作最简单的方法。

from datetime import datetime

Date = str(datetime.now())[:10]
Hour = str(datetime.now())[11:13]
Minute = str(datetime.now())[14:16]
Second = str(datetime.now())[17:19]
Millisecond = str(datetime.now())[20:]

如果你需要将这些值作为数字处理,只需将它们转换为int类型,例如:
Hour = int(str(datetime.now())[11:13])

1
这不是一个好主意。你没有使用库提供的方法 - 请参考其他答案。如果他们改变格式,使空格移位,你最终会在代码深处埋下硬编码字符串位置,最好的情况是引发错误,最坏的情况是导致计算不正确,可能难以调试。如果可以避免,请勿像这样硬编码位置。 - logicOnAbstractions

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接