2233


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`をなるべく簡単に求めたい。)

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


CC BY-SA 3.0
2014-12-20T07:31:17.473
2220
2015-01-18T16:45:03.763
2014-12-20T12:23:48.550
848
848
question
python
PythonのdatetimeオブジェクトからUnix Timeを求める


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

[code]

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

および

[code]

    >>> dt.microsecond
    123456
    
[/code]

とできます。


CC BY-SA 3.0
2014-12-20T09:18:14.690
2233
2014-12-20T09:18:14.690
3313
2220
answer


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()の実装も、上のようになっています。


CC BY-SA 3.0
2014-12-23T08:29:26.417
2422
2014-12-23T08:29:26.417
2913
2220
answer


ミリ秒の単位が要らないのであれば、

[code]

    >>> import os
    >>> import time
    >>> os.environ['TZ'] = 'UTC'
    >>> time.mktime(dt.utctimetuple())
    >>> 123456789.0
    
[/code]

環境変数をいじるので、Linuxでしか確認していないです。


CC BY-SA 3.0
2015-01-18T16:45:03.763
4794
2015-01-18T16:45:03.763
7483
2220
answer