20

Pythonに東部の時刻を表示させるにはどうすればよいですか?

Pythonのドキュメントを調べましたが、かなり混乱しています。私はPython3を使用しています。

ありがとう。

4

5 に答える 5

42

もちろん、はるかに直感的な方法があります。

from datetime import datetime
from pytz import timezone
tz = timezone('EST')
datetime.now(tz) 
## this returns a datetime object pointing to right now 
## according to the timezone info object handed in as the tz variable. 

または、以下に示すように、独自のdatetimeオブジェクトを定義して、として渡すtzことtzinfoもできます。

datetime(2016, 3, 30, 11, 13, 24, tzinfo=tz)
于 2016-03-30T10:18:49.550 に答える
8

pytz多くのタイムゾーンが必要であり、夏時間の重複する時間(つまり、深夜から午前1時まで)を正しく処理する必要がある場合は、このパッケージを使用する必要があります。

ただし、単純な場合は、独自のタイムゾーンクラスを作成するのは簡単です。

import datetime

class EST5EDT(datetime.tzinfo):

    def utcoffset(self, dt):
        return datetime.timedelta(hours=-5) + self.dst(dt)

    def dst(self, dt):
        d = datetime.datetime(dt.year, 3, 8)        #2nd Sunday in March
        self.dston = d + datetime.timedelta(days=6-d.weekday())
        d = datetime.datetime(dt.year, 11, 1)       #1st Sunday in Nov
        self.dstoff = d + datetime.timedelta(days=6-d.weekday())
        if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
            return datetime.timedelta(hours=1)
        else:
            return datetime.timedelta(0)

    def tzname(self, dt):
        return 'EST5EDT'

dt = datetime.datetime.now(tz=EST5EDT())

ここでは、抽象基本クラスdatetime.tzinfoを使用して、EST5EDT「東部時間帯」とはどういう意味か、つまりUTCオフセット(-5時間)と夏時間が有効になる時期(3月の第2日曜日と11月の第1日曜日)。

ところで、上記のテンプレートはドキュメントから取得されています:http datetime: //docs.python.org/library/datetime.html

「Pythonに東部の時刻を表示させる」とはどういう意味かわかりませんが、dt上の最後の行のオブジェクトを使用します。

    In [15]: print(dt)
2012-07-29 12:28:59.125975-04:00

    In [16]: print(dt.strftime('%Y-%m-%d %H:%M:%S'))
2012-07-29 12:28:59

    In [17]: print(dt.strftime('%H:%M:%S'))
12:28:59

    In [18]: print(dt.strftime('%s.%f'))  
1343579339.125975
于 2012-07-29T16:17:50.070 に答える
4

Pytzライブラリが役立つはずです。以下のコードでPytz(> 2.3をサポート)を使用すると、東部のタイムゾーンに従って時間を取得できます。

from datetime import datetime, timedelta
from pytz import timezone

eastern = timezone('US/Eastern')
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
loc_dt = eastern.localize(datetime(2012, 10, 29, 6, 0, 0))
print loc_dt.strftime(fmt)
于 2012-07-29T17:26:03.227 に答える
2

何らかの理由でpytzモジュールを使用できず、簡単な解決策が必要な場合は、

from datetime import datetime, timezone

datetime.now(timezone(timedelta(hours=-5), 'EST'))
于 2021-11-12T17:24:49.427 に答える
-1

タイムスタンプ全体が必要な場合:

import datetime
print (datetime.datetime.utcnow() - datetime.timedelta(hours=4))

YYYYmmdd形式の日付が必要な場合

print (datetime.datetime.utcnow() - datetime.timedelta(hours=4)).strftime('%Y%m%d')
于 2016-10-20T20:19:47.567 に答える