代码之家  ›  专栏  ›  技术社区  ›  Sam

Python:如何从datetime.timedelta对象获取时间?

  •  21
  • Sam  · 技术社区  · 16 年前

    mysql数据库表有一个数据类型为time的列( http://dev.mysql.com/doc/refman/5.0/en/time.html )。当访问表数据时,Python将此列的值作为datetime.timedelta对象返回。我如何从中抽出时间?(我没有真正理解python手册中timedelta的用途)。

    Python MySQLdb将其作为datetime.timedelta(064800)返回


    添加:不管表中的时间值如何,python MySQLdb似乎只返回datetime.timedelta(064800)。

    2 回复  |  直到 16 年前
        1
  •  43
  •   Rick Copeland    16 年前

    奇怪的是,Python返回的值是 datetime.timedelta . 它可能会返回一个 datetime.time 日期时间 ,您可以执行以下操作::

    value = datetime.timedelta(0, 64800)
    (datetime.datetime.min + value).time()
    

    datetime.datetime.min datetime.time() 当然,是作为 datetime

    A. 顺便说一句,它代表了两者之间的差异 datetime.datetime 价值观所以如果你减去一 datetime.datetime 从另一个,你会得到一个 datetime.timedelta . 如果你加上 datetime.datetime 用一个 datetime.timedelta ,你会得到一个 . 以上代码就是这样工作的。

        2
  •  2
  •   nnguyen    10 年前

    在我看来,MySQL中的时间类型旨在像Python中的datetime.timedelta那样表示时间间隔。从您引用的文档中:

    时间值的范围从“-838:59:59”到“838:59:59”。小时部分可能非常大,因为时间类型不仅可以用来表示一天中的某个时间(必须小于24小时),还可以用来表示经过的时间或两个事件之间的时间间隔(可能远远大于24小时,甚至是负数)。

    将datetime.timedelta转换为datetime.time的另一种方法是将列类型更改为datetime,而不使用日期字段。

    -插入:

    tIn = datetime.datetime(
        year=datetime.MINYEAR, 
        month=1, 
        day=1, 
        hour=10,
        minute=52,
        second=10
        )
    cursor.execute('INSERT INTO TableName (TimeColumn) VALUES (%s)', [tIn])
    

     cursor.execute('SELECT TimeColumn FROM TableName')
     result = cursor.fetchone()
     if result is not None:
         tOut = result[0].time()
         print 'Selected time: {0}:{1}:{2}'.format(tOut.hour, tOut.minute, tOut.second)
    

    对datetime对象调用datetime.time()以获取时间对象。