关于日期:如何在python中将datetime模块的时区设置为Eastern?

how to set timezone to eastern for DateTime module in python?

本问题已经有最佳答案,请猛点这里访问。

我正在利用datetime模块生成当前日期。但是,当我在晚上7点之后运行这个时,当前日期将成为明天的日期。

我不知道如何设置以下模块的时区

1
2
from datetime import *
print date.today()

我已经阅读了文档,但还没有找到如何设置它。


你的约会是一个"天真"的日期时间,它没有时区(tz=None)。然后您必须通过设置时区来本地化此日期时间。使用pytz模块进行此操作。

下面是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from datetime import datetime
from pytz import timezone
# define date format
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
# define eastern timezone
eastern = timezone('US/Eastern')
# naive datetime
naive_dt = datetime.now()
# localized datetime
loc_dt = datetime.now(eastern)
print(naive_dt.strftime(fmt))
# 2015-12-31 19:21:00
print(loc_dt.strftime(fmt))
# 2015-12-31 19:21:00 EST-0500

阅读Pytz文档了解更多信息


虽然date没有选择时区的方法,但datetime有选择时区的方法。您需要使用所需时区的信息创建TZINFO的子类:

1
2
3
4
5
6
7
8
9
class UTC(tzinfo):
    def utcoffset(self, dt):
        return timedelta(0)

    def tzname(self, dt):
        return"UTC"

    def dst(self, dt):
        return timedelta(0)

例如,东部标准时间(UTC-5:00,无DST):

1
2
3
4
5
6
7
8
9
class EST(tzinfo):
    def utcoffset(self, dt):
        return timedelta(hours = -5)

    def tzname(self, dt):
        return"EST"

    def dst(self, dt):
        return timedelta(0)

在为你的时区做了一个课程之后,你就可以得到你想要的date

1
datetime.now(UTC()).date()

(将UTC替换为时区类名)

还有一个图书馆,Pytz,可以让你更容易找到。