【问题标题】:How to use Python to calculate time如何使用 Python 计算时间
【发布时间】:2010-12-17 13:31:32
【问题描述】:

我想写一个 Python 脚本来充当时间计算器。

例如:

假设现在是 13:05:00

我想增加 1 小时 23 分 10 秒。

我想把答案打印出来。

如何在 Python 中做到这一点?

如果还涉及日期怎么办?

【问题讨论】:

  • 请显示您目前拥有的代码。这可以使用datetime 模块或time 模块来完成。请查看这些模块并提出具体问题。

标签: python datetime time


【解决方案1】:

datetime.timedelta 设计用于固定时差(例如,1 天是固定的,1 个月不是)。

>>> import datetime
>>> t = datetime.time(13, 5)
>>> print t
13:05:00
>>> now = datetime.datetime.now()
>>> print now
2009-11-17 13:03:02.227375
>>> print now + datetime.timedelta(hours=1, minutes=23, seconds=10)
2009-11-17 14:26:12.227375

请注意,仅对时间进行加法是没有意义的(但您可以将日期和时间combine 放入日期时间对象,使用它,然后获取时间)。 DST是罪魁祸首。例如,上午 12:01 + 5 小时可能是不同日期的上午 4:01、上午 5:01 或上午 6:01。

【讨论】:

    【解决方案2】:

    对于计算日期和时间有几个选项,但我会写简单的方法:

    import datetime
    import dateutil.relativedelta
    
    # current time
    date_and_time = datetime.datetime.now()
    date_only = date.today()
    time_only = datetime.datetime.now().time()
    
    # calculate date and time
    result = date_and_time - datetime.timedelta(hours=26, minutes=25, seconds=10)
    
    # calculate dates: years (-/+)
    result = date_only - dateutil.relativedelta.relativedelta(years=10)
    
    # months
    result = date_only - dateutil.relativedelta.relativedelta(months=10)
    
    # days
    result = date_only - dateutil.relativedelta.relativedelta(days=10)
    
    # calculate time 
    result = date_and_time - datetime.timedelta(hours=26, minutes=25, seconds=10)
    result.time()
    

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      查看datetime.timedelta

      Example
      >>> from datetime import timedelta
      >>> year = timedelta(days=365)
      >>> another_year = timedelta(weeks=40, days=84, hours=23,
      ...                          minutes=50, seconds=600)  # adds up to 365 days
      >>> year == another_year
      True
      >>> ten_years = 10 * year
      >>> ten_years, ten_years.days // 365
      (datetime.timedelta(3650), 10)
      >>> nine_years = ten_years - year
      >>> nine_years, nine_years.days // 365
      (datetime.timedelta(3285), 9)
      >>> three_years = nine_years // 3;
      >>> three_years, three_years.days // 365
      (datetime.timedelta(1095), 3)
      >>> abs(three_years - ten_years) == 2 * three_years + year
      True
      

      【讨论】:

        【解决方案4】:

        看看mx.DateTime,尤其是DateTimeDelta

        import mx.DateTime
        d = mx.DateTime.DateTimeDelta(0, 1, 23, 10)
        x = mx.DateTime.now() + d
        x.strftime()
        

        请记住,时间实际上是一件相当复杂的事情。闰年和闰秒只是开始......

        【讨论】:

          【解决方案5】:

          python 中的 datetime 类将提供您需要的一切。支持加减法等多种运算。

          http://docs.python.org/library/datetime.html

          【讨论】:

            猜你喜欢
            • 2017-10-12
            • 2016-10-16
            • 1970-01-01
            • 1970-01-01
            • 2021-11-28
            • 2019-11-04
            • 1970-01-01
            • 2020-10-17
            • 1970-01-01
            相关资源
            最近更新 更多