Python:从`datetime.datetime`转换为`time.time`

Ram*_*hum 50 python time calendar

在Python中,如何将a datetime.datetime转换为float我从time.time函数中获得的那种?

Ray*_*ger 42

使用time tuple方法并不难,并且仍然保留微秒:

>>> t = datetime.datetime.now()
>>> t
datetime.datetime(2011, 11, 5, 11, 26, 15, 37496)

>>> time.mktime(t.timetuple()) + t.microsecond / 1E6
1320517575.037496
Run Code Online (Sandbox Code Playgroud)

  • @RamRachum:你的公式假设`dt`是UTC时间.`mktime()`假设输入是本地时间.您应该避免使用代表本地时间的天真日期时间对象,除非您想立即显示它们.请改用UTC时间或时区感知日期时间对象. (3认同)

Amb*_*ber 26

time.mktime(dt_obj.timetuple())
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

  • 这减少了亚秒的部分时间. (6认同)
  • +1因为这个答案无论如何都是有用的,并且downvote是不合理的. (4认同)

Sve*_*ach 10

给定一个datetime.datetime对象dt,你可以使用

(dt - datetime.datetime.utcfromtimestamp(0)).total_seconds()
Run Code Online (Sandbox Code Playgroud)

例:

>>> dt = datetime.datetime.now(); t = time.time()
>>> t
1320516581.727343
>>> (dt - datetime.datetime.utcfromtimestamp(0)).total_seconds()
1320516581.727296
Run Code Online (Sandbox Code Playgroud)

请注意,该timedelta.total_seconds()方法是在Python 2.7中引入的.


lso*_*wen 8

我知道这是一个老问题,但是在python 3.3+中,现在有了使用datetime.timestamp()方法执行此操作的更简单方法:

from datetime import datetime
timestamp = datetime.now().timestamp()
Run Code Online (Sandbox Code Playgroud)

  • 时间戳= time.time() (3认同)
  • 然后提供一个更好的示例。因为`.now()。timestamp()`绝对比`time.time()`更差。前者在DST过渡期间可能会产生错误的结果。一个更好的例子:`.now(utc).timestamp()`(至少,它产生正确的结果)。 (2认同)

bgp*_*ter 5

的组合datetime.timetuple()time.mktime():

>>> import datetime
>>> import time
>>> now = datetime.datetime.now()
>>> secondsSinceEpoch = time.mktime(now.timetuple())
Run Code Online (Sandbox Code Playgroud)

  • 我个人更喜欢一个很好的答案超过4个好的,至少在软件方面.但每一个他自己. (2认同)