datetime时区转换

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(2013124154321872000)

而此时其tzinfo为none:


1

2

>>> utc_now.tzinfo

>>>

当涉及国际时区时,时区转换则会经常使用到,比如来尝试将刚才的UTC时间转换为本地时间。对于Python3.3+版本,可以这么做:


1

2

>>> utc_now.replace(tzinfo=datetime.timezone.utc).astimezone(tz=None)

datetime.datetime(2013124234321872000, tzinfo=datetime.timezone(datetime.timedelta(028800), ‘中国标准时间‘))

不过该方法貌似并不方便,特别是在转换其他时区的时候。而对于更低版本的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(2013124234321872000, 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(20131250313122000, tzinfo=<DstTzInfo ‘Asia/Shanghai‘ CST+8:00:00 STD>)

在Python中转换时区的方法还有很多,通过探索也许还能找到更好的方法。

时间: 2024-11-13 09:52:05

datetime时区转换的相关文章

python datetime时区转换

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_t

时区转换

工作中遇到的问题,服务器在美国,但是客户在印度,所以要把本地时间/服务器时间转换成印度时间.代码如下: 将本地时区转换成印度时区: String indianTime = string.Empty; DateTime localTime = DateTime.Now; indianTime=TimeZoneInfo.ConvertTimeBySystemTimeZoneId(localTime, "India Standard Time").ToString("dd-MMM-

python模块-pytz时区转换

pytz模块常用于时区的转换,常常配合datetime一起使用.我们知道datetime除了data方法生成的时间是没有时区概念,其他如time.datetime等都是有时区概念,即指定了tzinfo信息.>>> import datetime >>> datetime.datetime.now(tz)   datetime.datetime(2009, 2, 21, 15, 12, 33, 906000, tzinfo=<DstTzInfo 'Asia/Shan

Flex Date 时区转换

项目放到国外服务上时,由于有时区差异,要获得服务器时间就得进行时区转换 private function getTimeZoneFix(fixDate:Date, GMTHour:NUmber = 8):Date { var gmtDate:Date = new Date(fixDate); var hourOffset:Number = gmtDate.getTimezoneOffset() / 60 - GMTHour; gmtDate.setHours(gmtDate.getHours()

SQL Server全时区转换

SQL Server全时区转换 假如你的应用程序是跨国(例如跨国银行交易)使用的话,那么数据库的一些国际化特性支持可以说是非常重要 其中最常见的就是各国时区上的差异,由于SQL Server getdate()读取的是本地机器所返回的值. 并不包含数据库时区位移,SQL Server2008新增了 datetimeoffset  数据类型(结合时区为基础的当日时间) 搭配SWITCHOFFSET 函数来更方便的处理时区转换问题 --时区转换 SELECT SYSDATETIMEOFFSET()

Bailian2966 时区转换【时区计算】

2966:时区转换 总时间限制: 1000ms 内存限制: 65536kB 描述 直到19世纪,时间校准是一个纯粹的地方现象.每一个村庄当太阳升到最高点的时候把他们的时钟调到中午12点.一个钟表制造商人家或者村里主表的时间被认为是官方时间,市民们把自家的钟表和这个时间对齐.每周一些热心的市民会带着时间标准的表,游走大街小巷为其他市民对表.在城市之间旅游的话,在到达新地方的时候需要把怀表校准.但是,当铁路投入使用之后,越来越多的人频繁地长距离地往来,时间变得越来越重要.在铁路的早期,时刻表非常让人

[SQL SERVER][Memo]全时区转换

假设你的应用程序是跨国(如跨国银行事务)使用的话, 那么数据库一些国际化特性支持可说相当重要, 其中最常见的就是各国时区上的差异. 由于SQL Server getdate() 是撷取执行个体电脑所返回的值, 所以并不包含数据库时区位移, 但SQL2008后新增了 datetimeoffset? 数据类型(结合时区为基础的当日时间), 且可搭配 SWITCHOFFSET Function 来更方便处理时区转换需求, 下面自己笔记一下(个人认为在AP端处理应该可以更方便 TimeZoneInfo

Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等。

通过Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中时间范围示意图:可以很清晰的看出ZonedDateTime相当于LocalDateTime+ZoneId. ZonedDateTime是用来处理时区相关的时间,它的各种计算都离不开ZoneId.先看ZoneId. 1. ZoneId 为时区ID,比如Europe/Paris,表示欧洲巴黎时区 1.1 时区相关知识,时区,UTC时间,GMT时间,Unix时间戳 时区 地球自西向东旋转,东边比西边先看到

Flutter DateTime日期转换

1.日期转换成时间戳 var now=new DateTime.now(); print(now.millisecondsSinceEpoch); //单位毫秒,13位时间戳 2.时间戳转换成日期 var now=new DateTime.now(); var a=now.millisecondsSinceEpoch; // 时间戳 print(DateTime.fromMillisecondsSinceEpoch(a)); 3.创建指定时间 DateTime assignDay = new D