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中转换时区的方法还有很多,通过探索也许还能找到更好的方法。

datetime时区转换的更多相关文章

  1. Python3中datetime时区转换介绍与踩坑

    最近的项目需要根据用户所属时区制定一些特定策略,学习.应用了若干python3的时区转换相关知识,这里整理一部分记录下来. 下面涉及的几个概念及知识点: GMT时间:Greenwich Mean Ti ...

  2. python datetime时区转换

    from pytz import timezone def datetime_as_timezone(date_time, time_zone): tz = timezone(time_zone) u ...

  3. C#中UnixTime和DateTime的转换(转载)

    由于在API请求中返回回来的时间格式为UNIX形式,需要转换成正常的显示方式,在网上找到了这么一个例子. 使用是在C#中使用的,所以WP8开发应该也可以. 转载源地址:http://blog.linu ...

  4. python 27 获取时区转换后的时间

    python3的datetime有timezone属性,这里介绍python2.7环境下,获取时区转换后的时间. 利用第三方插件,pytz,没有安装的话安装一下. #!/usr/bin/env pyt ...

  5. Clickhouse 时区转换

    Clickhouse 时区转换 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS). OLAP场景的关键特征 大多数是读请求 数据总是以相当大的批(> 1000 ...

  6. SQL Server全时区转换

    SQL Server全时区转换 假如你的应用程序是跨国(例如跨国银行交易)使用的话,那么数据库的一些国际化特性支持可以说是非常重要 其中最常见的就是各国时区上的差异,由于SQL Server getd ...

  7. Java 时区转换(UTC+8 到 UTC 等等)

    前言:需要做时区转换,知道北京为UTC+8,东京为UTC+9,世界标准时间为UTC,所以下面的代码是只需要知道时区是+8还是+9还是0就可以了,不需要使用"CTT". " ...

  8. java中的时区转换

    目录 java中的时区转换 一.时区的说明 二.时间的表示 三.时间戳 四.Date类和时间戳 五.java中的时区转换 java中的时区转换 一.时区的说明 地球表面按经线从东到西,被划成一个个区域 ...

  9. C# DATETIME格式转换汇总 根据日期获取星期

    原文:C# DATETIME格式转换汇总 根据日期获取星期 C# DateTime.Now.Year --2019(年) DateTime.Now.Month --9(月) DateTime.Now. ...

随机推荐

  1. unity, 查看build版log文件

    http://blog.theknightsofunity.com/accessing-unity-game-logs/

  2. js中数组Array的一些常用方法总结

    var list = new Array()是我们在js中常常写到的代码,今天就总结一下Array的对象具有哪些方法. list[0] = 0; list[1] = 1; list[2] = 2; 或 ...

  3. win7下MariaDB10.0的my.ini配置文件的位置

    msi版本的,安装后在安装目录下的\data\my.ini 常用的配置选项: 1.修改默认的存储引擎 在配置文件my.ini(linxu下为my.cnf) 中的 [mysqld] 下面加入defaul ...

  4. Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解

    Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...

  5. SVN 获取源码一直没绿色打勾的标识原因。

    左天晚上,找了一晚的原因,各种尝试,SVN 获取源码一直没绿色打勾的标识原因. 后来在百度知道发现了这个原因,是因为我没有使用的是EXPORT,这样只是导出没有代码关联, 只要 使用checkout就 ...

  6. [Hibernate] - Study test project

    最近玩Hibernate的测试代码工程: http://files.cnblogs.com/HD/TestHibernate.7z

  7. 【jmeter】搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)

    一.环境准备: 1.JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.Jmeter:http://jme ...

  8. jQ的toggle()方法示例

    定义和用法toggle() 方法切换元素的可见状态.如果被选元素可见,则隐藏这些元素,如果被选元素隐藏,则显示这些元素. 语法$(selector).toggle(speed,callback,swi ...

  9. Install and configure Intel NIC teaming on R420

    OS env: windows2008 R2 std 1. Download NIC driver from Dell Website http://www.dell.com/support/home ...

  10. TCP/IP四层模型和OSI七层模型的概念

    转:http://blog.csdn.net/superjunjin/article/details/7841099/ TCP/IP四层模型 TCP/IP是一组协议的代名词,它还包括许多协议,组成了T ...