From: http://www.dannysite.com/blog/122/
Python标准库中的datetime模块提供了各种对日期和时间的处理方法。从本文的主题着手,首先利用datetime中提供的utcnow()方法获取到当前UTC时间:
1
2
3
4
|
>>>
import
datetime
>>> utc_now
=
datetime.datetime.utcnow()
>>> utc_now
datetime.datetime(
2013
,
12
,
4
,
15
,
43
,
21
,
872000
)
|
而此时其tzinfo为none:
1
2
|
>>> utc_now.tzinfo
>>>
|
当涉及国际时区时,时区转换则会经常使用到,比如来尝试将刚才的UTC时间转换为本地时间。对于Python3.3+版本,可以这么做:
1
2
|
>>> utc_now.replace(tzinfo
=
datetime.timezone.utc).astimezone(tz
=
None
)
datetime.datetime(
2013
,
12
,
4
,
23
,
43
,
21
,
872000
, tzinfo
=
datetime.timezone(datetime.timedelta(
0
,
28800
),
'中国标准时间'
))
|
不过该方法貌似并不方便,特别是在转换其他时区的时候。而对于更低版本的Python,则datetime.timezone可能压根就还没有。因此更便捷的方法是借助第三方包来实现 —— pyzt,下面就借助于它来实现时区转换:
1
2
3
4
5
6
7
8
|
>>>
from
pytz
import
timezone
>>> utc_now.tzinfo
>>> tzchina
=
timezone(
'Asia/Chongqing'
)
>>> tzchina
<DstTzInfo
'Asia/Chongqing'
LMT
+
7
:
06
:
00
STD>
>>> utc
=
timezone(
'UTC'
)
>>> utc_now.replace(tzinfo
=
utc).astimezone(tzchina)
datetime.datetime(
2013
,
12
,
4
,
23
,
43
,
21
,
872000
, tzinfo
=
<DstTzInfo
'Asia/Chongqing'
CST
+
8
:
00
:
00
STD>)
|
要转换为其他时区,则以此类推。
对于我自己来说,时区的转换主要出现在Django中,会经常需要将UTC时间转换为本地时间,而Django本身也已经为我们考虑到了这一点,因此实际操作起来更为方便:
1
2
3
4
5
|
>>>
from
django.utils.timezone
import
utc
>>>
from
django.utils.timezone
import
localtime
>>> now
=
datetime.datetime.utcnow().replace(tzinfo
=
utc)
>>> localtime(now)
datetime.datetime(
2013
,
12
,
5
,
0
,
3
,
13
,
122000
, tzinfo
=
<DstTzInfo
'Asia/Shanghai'
CST
+
8
:
00
:
00
STD>)
|
在Python中转换时区的方法还有很多,通过探索也许还能找到更好的方法。
from pytz import timezone def datetime_as_timezone(date_time, time_zone): tz = timezone(time_zone) utc = timezone('UTC') return date_time.replace(tzinfo=utc).astimezone(tz) def datetime_to_str(date_time): date_time_tzone = datetime_as_timezone(date_time, 'Asia/Shanghai') return '{0:%Y-%m-%d %H:%M}'.format(date_time_tzone)
From: http://www.dannysite.com/blog/122/
Python标准库中的datetime模块提供了各种对日期和时间的处理方法。从本文的主题着手,首先利用datetime中提供的utcnow()方法获取到当前UTC时间:
1
2
3
4
|
>>>
import
datetime
>>> utc_now
=
datetime.datetime.utcnow()
>>> utc_now
datetime.datetime(
2013
,
12
,
4
,
15
,
43
,
21
,
872000
)
|
而此时其tzinfo为none:
1
2
|
>>> utc_now.tzinfo
>>>
|
当涉及国际时区时,时区转换则会经常使用到,比如来尝试将刚才的UTC时间转换为本地时间。对于Python3.3+版本,可以这么做:
1
2
|
>>> utc_now.replace(tzinfo
=
datetime.timezone.utc).astimezone(tz
=
None
)
datetime.datetime(
2013
,
12
,
4
,
23
,
43
,
21
,
872000
, tzinfo
=
datetime.timezone(datetime.timedelta(
0
,
28800
),
'中国标准时间'
))
|
不过该方法貌似并不方便,特别是在转换其他时区的时候。而对于更低版本的Python,则datetime.timezone可能压根就还没有。因此更便捷的方法是借助第三方包来实现 —— pyzt,下面就借助于它来实现时区转换:
1
2
3
4
5
6
7
8
|
>>>
from
pytz
import
timezone
>>> utc_now.tzinfo
>>> tzchina
=
timezone(
'Asia/Chongqing'
)
>>> tzchina
<DstTzInfo
'Asia/Chongqing'
LMT
+
7
:
06
:
00
STD>
>>> utc
=
timezone(
'UTC'
)
>>> utc_now.replace(tzinfo
=
utc).astimezone(tzchina)
datetime.datetime(
2013
,
12
,
4
,
23
,
43
,
21
,
872000
, tzinfo
=
<DstTzInfo
'Asia/Chongqing'
CST
+
8
:
00
:
00
STD>)
|
要转换为其他时区,则以此类推。
对于我自己来说,时区的转换主要出现在Django中,会经常需要将UTC时间转换为本地时间,而Django本身也已经为我们考虑到了这一点,因此实际操作起来更为方便:
1
2
3
4
5
|
>>>
from
django.utils.timezone
import
utc
>>>
from
django.utils.timezone
import
localtime
>>> now
=
datetime.datetime.utcnow().replace(tzinfo
=
utc)
>>> localtime(now)
datetime.datetime(
2013
,
12
,
5
,
0
,
3
,
13
,
122000
, tzinfo
=
<DstTzInfo
'Asia/Shanghai'
CST
+
8
:
00
:
00
STD>)
|
在Python中转换时区的方法还有很多,通过探索也许还能找到更好的方法。
from pytz import timezone def datetime_as_timezone(date_time, time_zone): tz = timezone(time_zone) utc = timezone('UTC') return date_time.replace(tzinfo=utc).astimezone(tz) def datetime_to_str(date_time): date_time_tzone = datetime_as_timezone(date_time, 'Asia/Shanghai') return '{0:%Y-%m-%d %H:%M}'.format(date_time_tzone)