2009-04-18 17 views
19

mysqlデータベーステーブルには、データ型が時刻(http://dev.mysql.com/doc/refman/5.0/en/time.html)の列があります。テーブルデータにアクセスすると、Pythonはこのカラムの値をdatetime.timedeltaオブジェクトとして返します。この時間をどのように抽出するのですか? (私はtimedeltaがPythonのマニュアルから得たものを本当に理解していませんでした)。Python:datetime.timedeltaオブジェクトから時刻を取得するにはどうすればよいですか?

など。テーブルの列は、「午後06時00分00秒」 のPythonのMySQLdbはdatetime.timedelta(0、64800)


としてこれを返す値が含まれています(それは別の値を返しません)以下であるものを無視してください -

追加:テーブルの時刻の値にかかわらず、python-MySQLdbはdatetime.timedelta(0、64800)のみを返すようです。

注:私はそれはPythonがdatetime.timedeltaとして値を返すことに奇妙だ2.4

答えて

28

のPythonを使用しています。おそらくdatetime.timeが返されます。とにかく、真夜中からの経過時間を返しているようです(テーブルの列が午後6時であると仮定して)。 datetime.timeに変換するためには、次の操作を行うことができます::

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

datetime.datetime.mindatetime.time()をあなたはより多くの情報が必要な場合は、当然のことながら、datetimeモジュールの一部として文書化されています。

datetime.timedeltaは、2つの値の差の表現です。したがって、datetime.datetimeを別のものから減算すると、datetime.timedeltaが得られます。 datetime.timedeltadatetime.datetimeを追加すると、datetime.datetimeが表示されます。それが上のコードの仕組みです。

+3

私の最初の試みは 'datetime.time.min + value'を使うことでしたが、' datetime.time'オブジェクトを 'datetime.timedelta'オブジェクトに追加することはできないので、これはうまくいきません。 –

+0

Pythonは実際の時刻の値にかかわらずdatetime.timedelta(0、64800)のみを返します。 – Sam

+1

ええ、私は異なるDB-API層、MySQLdbとPythonの異なるバージョン、さらには利用可能なライブラリ(つまりmxDateTime)でさえ、日付と時刻が異なる方法で通知されます。今は整数とUnixの時間を使っています。曜日や何かに基づいてクエリを実行する必要がない限り、これは一般に簡単です。 – bobince

2

MySQLのTIMEタイプは、datetime.timedeltaがPythonで行うように時間間隔を表すことを意図しているようです。あなたが参照したドキュメントから:

TIMEの値は、「-838:59:59」から「838:59:59」の範囲で設定できます。 TIMEタイプは、1日の時間(24時間未満でなければならない)だけでなく、経過時間または2つのイベント間の時間間隔(これは、より大きい可能性があります)を表すために使用することができます24時間、または否定的な)。

DATETIMEカラムタイプを変更することであろうdatetime.timeのにdatetime.timedeltaから変換して日付フィールドを使用していないの代替。

-insert:

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]) 

-Select:

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.timeの()は、時間オブジェクトを取得するDateTimeオブジェクトで呼び出されます。

関連する問題