PythonのdatetimeオブジェクトからUnix Timeを求める


Unixタイムを、特定のタイムゾーンでの日時(datetimeオブジェクト)に変換するには、

[code]

    import datetime
    import pytz
    unix_time = 123456789.123456
    dt = datetime.datetime.fromtimestamp(unix_time, pytz.timezone('America/Los_Angeles'))
    
[/code]

のようにすればできます。

逆に、このようなdatetimeオブジェクトからunixタイムを計算するにはどのような方法が簡単でしょうか? (上記の例では、`dt`から、UNIXタイム
`123456789.123456`をなるべく簡単に求めたい。)

計算するマシンのタイムゾーンがなんであっても正しく動くアプローチが望ましいです。よろしくお願いします。




元の`unix_time`の秒数を知りたいということでしたら

[code]

    >>> import calendar
    >>> calendar.timegm(dt.astimezone(pytz.utc).timetuple())
    123456789
    
[/code]

および

[code]

    >>> dt.microsecond
    123456
    
[/code]

とできます。




Python3では、

[code]

    >>> dt.timestamp()
    123456789.123456
    
[/code]

でタイムスタンプを取得できます。

Python2にはtimestamp()メソッドがないので、素直にエポックを定数として持っておいて

[code]

    >>> EPOCH = datetime.datetime(1970, 1, 1, tzinfo=pytz.timezone('utc'))
    >>> (dt - EPOCH).total_seconds()
    123456789.123456
    
[/code]

がお手軽ではないでしょうか。ちなみに、Python3のdatetime.timestamp()の実装も、上のようになっています。

