2011-08-30 20 views
5

私はまったく見てきましたが、多くのハッキングがあるようですが、これを行うための単純な「良い」方法はありません。私はtime.time()のように、Python datetimeオブジェクトをマイクロ秒に変換したい(seconds.microseconds)。Python datetime to microtime

これを行うにはどうすればよいですか? mktime()を使用すると、マイクロ秒を一掃して、おそらくtimedeltaを構築することができますが、それは正しいとは思われません。また、float(strftime("%s.%f"))(適切な秒数を計上する)を使用することもできますが、これはスーパーハックのようです。

「正しい」方法は何ですか?

答えて

6
time.mktime(dt.timetuple()) + dt.microsecond/1000000.0 

あなたはstrftimefloatを使用しない場合は動作します。

と同じものがdt = datetime.datetime.now()で返されます。

+0

datetimeオブジェクトのタイムゾーンとローカルのタイムゾーンが同じでない場合は、代わりにcalendar.gmtime(dt.utctimetuple())を使用する必要があります –

+0

'calendar.timegm'を意味します。これはMarkのバージョンと同じ回答を返します。つまり、UTC以外の' datetime'オブジェクトでは正しくありません。私の時代からの時間は、UTCの誰かのものと同じであり、UTCのオフセットによって変わらない。 – agf

+0

dt.utctimetupleはdatetimeオブジェクトの時間タプルをUTCで返しますので、タイムゾーンに関係なく常に正しいです。 calendar.timegmはutc timetupleを使用します。 –

2
def microtime(dt): 
    unixtime = dt - datetime.datetime(1970, 1, 1) 
    return unixtime.days*24*60*60 + unixtime.seconds + unixtime.microseconds/1000000.0 
+0

これは 'datetime.datetime.now()'の 'time.time()'と同じものではありません。 'dt'がUTCだと仮定しているように見えるので、タイムゾーンのUTCオフセットによってオフになります。 – agf

+0

@agf、 'time.time()'とは何ですか?ドキュメントで見つけられません:http://docs.python.org/library/datetime.html –

+0

'datetime.time'、' time.time() ' - http://docs.pythonではありません。 org/library/time.html#time.time – agf