【问题标题】:Convert datetime since a given date to minutes [duplicate]将自给定日期以来的日期时间转换为分钟[重复]
【发布时间】:2012-08-22 18:18:59
【问题描述】:

可能重复:
Python datetime to Unix timestamp

有没有办法将datetime 转换为int,表示自例如2012 年1 月以来的分钟数,以便可以修改int,将其写入数据库,进行比较等等? 编辑: 我运行它的服务器使用 Python 2.6.6

【问题讨论】:

  • 请尝试datetime.datetime.strptimetimestamp() 'datetime' 中的函数。

标签: python datetime int python-2.6


【解决方案1】:

如果您想要两个日期之间的 delta 分钟,您可以通过减去两个日期来创建一个datetime.timedelta 对象(请参阅here),然后按此问题所示检索分钟:

Convert a timedelta to days, hours and minutes

【讨论】:

  • 不完全是,链接的问题没有给你一种方法来计算时间增量中的总分钟数。例如,在编写这些答案时,.total_seconds() 方法尚不可用。
【解决方案2】:

通过减去日期时间,您可以获得时间增量。这个 timedelta 可以自己划分给你你想要的:

(datetime.datetime.now() - datetime.datetime(2012, 1, 1)) // datetime.timedelta(minutes=1)

(此代码仅对 python3 有效,这就是为什么每个人都应该切换到 python3 ;-))

【讨论】:

  • 不,您不能将一个时间增量除以另一个时间增量。 TypeError: 不支持的操作数类型 //: 'datetime.timedelta' 和 'datetime.timedelta'
  • 啊,确实漏掉了什么; SO 语法突出显示错误地将其标记为注释,我还不够清醒,无法注意到事情。好把戏!
  • @MartijnPieters 是的,我完成了 // 工作!
  • 有趣,我想知道哪些标签会干扰在这里设置正确的语法突出显示语言。通常,问题上的python 标记应该足以使这项工作发挥作用,但如果其他标记之一具有与之关联的不同 语言,则荧光笔会退回到自动检测。跨度>
  • @MartijnPieters 是的。 language: .*py 都没有工作。唯一的一个是language-all: lang-py
【解决方案3】:

减去两个datetime.datetime 对象得到一个timedelta object,它有一个.total_seconds() method(在Python 2.7 中添加)。将此除以 60 并转换为 int() 以获取自参考日期以来的分钟数:

import datetime

january1st = datetime.datetime(2012, 01, 01)
timesince = datetime.datetime.now() - january1st
minutessince = int(timesince.total_seconds() / 60)

或在 python shell 中:

>>> import datetime
>>> january1st = datetime.datetime(2012, 01, 01)
>>> timesince = datetime.datetime.now() - january1st
>>> minutessince = int(timesince.total_seconds() / 60)
>>> minutessince
346208

对于 python 2.6 及更早版本,您必须使用 .days.seconds 属性来计算分钟数:

minutessince = timesince.days * 1440 + timesince.seconds // 60

它也给你一个整数。

【讨论】:

  • 距离 1 月 1 日只有 608 分钟,这不是敲响了警钟吗? :) .seconds 从午夜开始,你想要.total_seconds()
  • @Kos: 天哪,我们今天都在跌跌撞撞吗.. 现在都修好了(包括正确拼写 // 运算符,昨晚真的睡得太少了)。
  • 另外,OP 需要一个int。 :-)
  • 太旧了。 :) Martijn 建议使用 t.seconds // 60 + t.days * 24*60
  • @user530476:是的,我会更新答案以适应 python 2.6(total_seconds() 是在 2.7 中引入的)。
【解决方案4】:
>>> import datetime
>>> now = datetime.datetime.now()
>>> then  = datetime.datetime(year=2012, month=1, day=1)
>>> delta=now-then

这是一个表示时间间隔的 timedelta 对象。

>>> print delta
240 days, 11:05:25.507000

要计算该间隔内的分钟数,请使用:

>>> print delta.total_seconds() / 60
346265.42511666665

【讨论】:

  • : 'datetime.timedelta' 对象没有属性 'total_seconds'
  • 更新你的 Python。 total_seconds 在 2.7 (2010) 中引入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多