【问题标题】:Manipulating DateTime and TimeDelta objects in python在 python 中操作 DateTime 和 TimeDelta 对象
【发布时间】:2012-04-02 07:44:14
【问题描述】:

我想知道如何操作 Datetime 和 Time delta 对象。我正在编写一个游戏,其中不同的行星有不同的时间尺度。我想知道如何修改日期时间对象。

例如,如果我有一个日期时间对象 - 某个过去的日期时间对象,我想知道是否有可能知道 6 小时可能进入不同的次数以及剩余的分钟数是多少?

例如...

now = datetime.now()
then = some datetime object
diff = now - then
num 6 hour blocks = diff / 6 (rounded down)
minutes = diff % 6

谢谢!

【问题讨论】:

  • 您能否更好地解释您的问题。编写伪代码,或展示您尝试过的内容。
  • 或者我猜另一种说法是有没有办法将 timedelta 对象作为双精度或浮点数来处理?
  • 您可能还想尝试创建自己的日期时间类。取决于你如何为你的宇宙建模,但只使用恒定的秒数可能会更简单,然后每个行星每次旋转(日/夜循环)的秒数和围绕本地恒星的每次旅行的秒数。跨度>

标签: python datetime timedelta


【解决方案1】:

timedelta 对象在 Python 2.7 中有一个 total_seconds 方法。所以你可以用它来解决它。当您从另一个日期时间对象中减去一个日期时间对象时,您会得到一个 timedelta 对象。

from datetime import timedelta

minutes = 60
hours = 60 * minutes
days = 24 * hours

diff = timedelta(days=6)

days_in_the_past = int(diff.total_seconds() / days)
hours_remainder = diff.total_seconds() % days

hours_in_the_past = int(diff.total_seconds() / hours)
seconds_remainder = diff.total_seconds() % hours

这就是你想要做的吗?如果您使用的是旧版本的 Python,那么您可以定义一个与 total_seconds 方法执行相同操作的函数,如下所示:

def total_seconds(timedelta_object):
    return timedelta_object.days * 86400 + timedelta_object.seconds

【讨论】:

    【解决方案2】:

    timedelta 对象只有dayssecondsmicroseconds 字段,所以我猜你必须使用seconds 几个小时和分钟:

    num_blocks = diff.seconds//(6*3600)
    minutes = (diff.seconds%(6*3600))//60
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2023-02-10
      相关资源
      最近更新 更多