关于datetime:如何让python显示当前时间(东部)

How to get python to display current time (eastern)

如何让python在东方显示时间?

我已经看过了Python文档,但它非常混乱。我使用的是python 3。

谢谢。


当然,还有一种更直观的方法:

1
2
3
4
5
6
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传递,如下所示:

1
datetime(2016, 3, 30, 11, 13, 24, tzinfo=tz)


如果您需要很多时区,并且需要正确处理夏令时的重复小时数(即从午夜到凌晨1点发生的情况),则应使用包pytz

但对于一些简单的事情,创建自己的时区类就足够简单了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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日星期日)。

btw上面的模板是从datetime文档中提取的:http://docs.python.org/library/datetime.html网站

不知道"让python在东方显示时间"是什么意思,但使用上面最后一行中的dt对象:

1
2
3
4
5
6
7
8
9
10
11
    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


Pytz图书馆应该是有用的。使用下面代码的pytz(支持>2.3)可以根据东部时区获得时间。

1
2
3
4
5
6
7
8
from datetime import datetime, timedelta
from pytz import timezone
import pytz

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)


如果需要整个时间戳:

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

如果您只需要YYMMDD格式的日期

1
print (datetime.datetime.utcnow() - datetime.timedelta(hours=4)).strftime('%Y%m%d')