web-dev-qa-db-ja.com

mysql datetimeとpython timestampの間で変換する適切な方法は何ですか?

http://dev.mysql.com/doc/refman/5.0/en/datetime.html に従います。文字列値 'YYYY-MM-DD HH:MM:SS'をタイムスタンプintに変換する方法を見つけました。

私はpythonのドキュメントで調べました。

私は試した:

print(time.strptime('2013-01-12 15:27:43', '%Y-%m-%d %H:%M:%S'))   

pythonはこのような結果を私に与えます。

time.struct_time(tm_year = 2013、tm_mon = 1、tm_mday = 12、tm_hour = 15、tm_min = 27、tm_sec = 43、tm_wday = 5、tm_yday = 12、tm_isdst = -1)

タイムスタンプをYYYY-MM-DD HH:MM:SS形式に変換するためにこれを試しました

print(time.strftime('%Y-%m-%d %H:%M:%S',time.time()))

pythonで型エラーが発生します。

私はタイムスタンプを使用して時間と日付を計算するだけです.Pythonにはすでにシンプルで効率的な方法があり、一時データを作成する必要がないことを願っています。

答えによれば、私は2つの方法を書きます。それが役立つことを願っています

import time

def convertTimestampToSQLDateTime(value):
    return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(value))

def convertSQLDateTimeToTimestamp(value):
    return time.mktime(time.strptime(value, '%Y-%m-%d %H:%M:%S'))
28
Max

私が適切に理解していない場合、これを更新して幸せですが、ここに役立ついくつかの例があります。これはdatetimeの代わりにtimeモジュールを使用することに注意してください。

_>>> import datetime
_

ここでは、タイムスタンプの例tsとフォーマットfを設定します。

_>>> ts = '2013-01-12 15:27:43'
>>> f = '%Y-%m-%d %H:%M:%S'
_

上記と同様に、strptime関数(_datetime.datetime_から)を使用して、書式設定パラメーターに基づいて文字列をdatetimeオブジェクトに変換します。

_>>> datetime.datetime.strptime(ts, f)
datetime.datetime(2013, 1, 12, 15, 27, 43)
_

逆になりました-ここではdatetime.datetime.now()を使用して現在の時刻をdatetimeオブジェクトとして取得します。

_>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2013, 1, 12, 0, 46, 54, 490219)
_

datetimeの場合、strftimeメソッドはdatetimeオブジェクト自体で実際に呼び出され、フォーマットパラメーターを引数として使用します。

_>>> now.strftime(f)   
'2013-01-12 00:46:54'
_

あなたの状況では、エラーが発生した理由は、time.time()がfloatを返すためです。

_>>> time.time()
1357980846.290231
_

ただし、_time.strftime_には、上記と同様のtimeタプルが必要です。狂ったスパイラルに陥ることなく、time.localtime()などの関数は前述のtime Tupleを返し、期待どおりに戻ります。

_>>> now = time.localtime()
>>> now
time.struct_time(tm_year=2013, tm_mon=1, tm_mday=12, tm_hour=0, tm_min=55, tm_sec=55, tm_wday=5, tm_yday=12, tm_isdst=0)
>>> f = '%Y-%m-%d %H:%M:%S'
>>> time.strftime(f, now)
'2013-01-12 00:55:55'
_
42
RocketDonkey