【问题标题】:adding 2 1/2 hours to a time object in python将 2 1/2 小时添加到 python 中的时间对象
【发布时间】:2010-07-21 12:00:27
【问题描述】:

我需要能够将我从 sql 数据库接收到的时间对象上的时间转换为 python。这是我正在使用的当前 python 代码,没有任何转换。我需要将时间增加 2 和 1/2 小时。

def getLastReport(self, sql):



    self.connectDB()
    cursor.execute(sql)
    lastReport = cursor.fetchall()

    date = lastReport[0][0].strftime('%Y-%m-%d %H:%M UTC')

    dataset_id = int(lastReport[0][1])

    cursor.close()
    DATABASE.close()
    return date, dataset_id  

【问题讨论】:

    标签: python mysql time


    【解决方案1】:

    你看过日期时间模块吗? http://docs.python.org/library/datetime.html

    将您的 SQL 时间转换为日期时间,并将 timedelta 对象设为 2.5 小时。然后将两者相加。

    from datetime import datetime
    
    dt = datetime.strptime( date, '%Y-%m-%d %H:%M' )
    dt_plus_25 = dt + datetime.timedelta( 0, 2*60*60 + 30*60 )
    

    【讨论】:

    • 我似乎无法让您的代码正常工作。错误:回溯(最后一次调用):文件“”,第 1 行,在 -toplevel-dt = datetime.strptime( date, '%Y-%m-%d %H:%M' ) AttributeError:“模块”对象没有属性“strptime”
    • 要么将导入更改为from datetime import datetime,要么将代码更改为datetime.datetime.strptime
    【解决方案2】:

    添加datetime.timedelta(0, 2.5*60*60)。

    【讨论】:

    • 2*60*60 + 30*60 会更好,因为它不返回浮点数。但它最多可以关闭一秒钟。
    【解决方案3】:

    试试这个(用你正在使用的任何数据库接口切换 sqlite3):

    f= lastReport[0][0]
    newtime = sqlite3.Time(f.hour + 2, f.minute + 30, f.second, f.microsecond)
    

    我认为像 Igancio 建议的那样添加 datetime.timedelta(0, 2.5*60*60) 是最好的解决方案,但我明白了:

    'unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'.
    

    【讨论】:

      【解决方案4】:

      我通常使用第 3 方模块 dateutil 来处理这类事情。它使这种时间转换更容易实现和理解:

      http://labix.org/python-dateutil

      【讨论】:

        猜你喜欢
        • 2010-10-10
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-26
        • 1970-01-01
        • 2012-12-01
        相关资源
        最近更新 更多