摘录 廖雪峰网站

datetime是python内置的处理日期和时间的标准库

获取当前日期和时间

>>> from datetime import datetime
>>> print(datetime.now())
2018-04-08 23:07:58.547082

获取指定日期和时间

>>> dt = datetime(2017,4,8,23,10)
>>> print(dt)
2017-04-08 23:10:00

datetime转换为timestamp

实际上,计算机中都是用数字表示时间的。1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp。

timestamp的值与时区毫无关系,因为timestamp一旦确定,其UTC时间就确定了,转换到任意时区的时间也是完全确定的,这就是为什么计算机存储的当前时间是以timestamp表示的,因为全球各地的计算机在任意时刻的timestamp都是完全相同的(假定时间已校准)。

标准的:

timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00

对应的北京时间为:

timestamp = 0 = 1970-1-1 08:00:00 UTC+8:00

调用timestamp方法可以将一个datetime类型的数据转化为timestamp类型的数据:

>>> dt = datetime(2017,4,8,23,10)
>>> print(dt)
2017-04-08 23:10:00
>>> dt.timestamp()
1491664200.0

结果是一个浮点数,其中小数部分表示毫秒数。

timestamp转化为datetime

datetime的fromtimestamp()方法可以实现此功能:

>>> t= 1491664200.0
>>> print(datetime.fromtimestamp(t))
2017-04-08 23:10:00

其实,上述的转换是timestamp和本地时间之间的转换。而本地时间是指操作系统设置的时区时间。使用utcfromtimestamp()可以转换为格林威治标准时间:

>>> print(datetime.utcfromtimestamp(t))
2017-04-08 15:10:00

字符串str转换为datetime

>>> cday = datetime.strptime('2017-4-8 23:20:38','%Y-%m-%d %H:%M:%S')
>>> print(cday)
2017-04-08 23:20:38

其中,字符串'%Y-%m-%d %H:%M:%S'规定了日期和时间部分的格式

datetime转化为str

>>> print(datetime.now().strftime('%a/%b/%d %H:%M'))
Sun/Apr/08 23:28

datetime的加减

>>> from datetime import datetime,timedelta
>>> now = datetime.now()
>>> now + timedelta(hours=8)
datetime.datetime(2018, 4, 9, 7, 30, 3, 485905)
>>> now - timedelta(days=2)
datetime.datetime(2018, 4, 6, 23, 30, 3, 485905)
>>> now - timedelta(days=2,hours = 2)
datetime.datetime(2018, 4, 6, 21, 30, 3, 485905)

本地时间转换为UTC时间

本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间,而UTC时间是指UTC+0:00的时间。

一个datetime类型的数据有一个时区属性tzinfo,默认为None,可以给datetime设置一个时区:

>>> from datetime import datetime,timedelta,timezone
>>> tz_utc_8 = timezone(timedelta(hours=8))
>>> now = datetime.now()
>>> now
datetime.datetime(2018, 4, 9, 22, 17, 41, 334741)
>>> dt = now.replace(tzinfo=tz_utc_8)
>>> dt
datetime.datetime(2018, 4, 9, 22, 17, 41, 334741, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))

时区转换

可以通过utcnow()获得当前的UTC时间,在转换为任意时区的时间:

>>> utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
>>> print(utc_dt)
2018-04-09 14:21:48.205455+00:00
>>> bh_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
>>> print(bh_dt)
2018-04-09 22:21:48.205455+08:00
>>> tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(tokyo_dt)
2018-04-09 23:21:48.205455+09:00
>>> tokyo_dt2 = bh_dt.astimezone(timezone(timedelta(hours=9)))
>>> print(tokyo_dt2)
2018-04-09 23:21:48.205455+09:00

例子中,utc_dt是一个UTC时间,并强制设置时区为UTC+0:00。这是后续的时区转换的关键。

astimezone()可以转换任意时区;

bh_dt是东八区的时间;tokyo_dt和tokyo_dt2都是东九区的时间,前者是通过utc_dt转换的,后者是通过东八区的时间转换的

python内置模块-datetime的更多相关文章

  1. Python 入门之 内置模块 -- datetime模块

    Python 入门之 内置模块 -- datetime模块 1.datetime模块 from datetime import datetime (1)datetime.now() 获取当前时间和日期 ...

  2. Python学习笔记【第八篇】:Python内置模块

    什么时模块 Python中的模块其实就是XXX.py 文件 模块分类 Python内置模块(标准库) 自定义模块 第三方模块 使用方法 import 模块名 form 模块名 import 方法名 说 ...

  3. python内置模块[sys,os,os.path,stat]

    python内置模块[sys,os,os.path,stat] 内置模块是python自带功能,在使用内置模块时,需要遵循 先导入在 使用 一.sys 对象 描述 sys.argv 命令行参数获取,返 ...

  4. python内置模块介绍(一)

     本文主要介绍模块列表如下: os sys re time datetime random shutil subprocess os模块 os.getcwd()                    ...

  5. Python内置模块(re+collections+time等模块)

    Python内置模块(re+collections+time等模块) 1. re模块 import re 在python要想使用正则必须借助于模块 re就是其中之一 1.1 findall功能( re ...

  6. Python的datetime

    Python的datetime 总会用到日期格式化和字符串转成日期,贴点代码以供参考,其实API真的是很全的,可是又不知道具体的method... datetime.datetime.strftime ...

  7. python内置模块(4)

    这一部分是python内置模块系列的最后一部分,介绍了一些小巧有用的内置模块. 目录: 1.random 2.shelve 3.getpass 4.zipfile 5.tarfile 6.bisect ...

  8. python 有关datetime时间日期 以及时间戳转换

    直接上代码 其中有注释 #coding=utf-8 import time import datetime def yes_time(): #获取当前时间 now_time = datetime.da ...

  9. python的datetime模块处理时间

    python的datetime模块主要用来处理时间,里面包含很多类,包括timedelay,date,time,datetime等 开发中经常会用到模块里面的datetime类,这是一个表示日期时间的 ...

随机推荐

  1. linuxRAID(软)

    RAID是一种存储机制,英文全名为“RedundantArrays of Inexpensive Disks”,即容错廉价磁盘阵列.RAID可以通过一些技术(硬件或者软件)将多个磁盘整合起来,不仅是一 ...

  2. Wordpress未授权查看私密内容漏洞 分析(CVE-2019-17671)

    目录 0x00 前言 0x01 分析 0x02 思考 0x03 总结 0x04 参考 0x00 前言 没有 0x01 分析 这个漏洞被描述为"匿名用户可访问私密page",由此推断 ...

  3. 全排列(STL)

    输入一个整数n,输出1~n的全排列(是不是很水) 在此记录stl做法 #include<bits/stdc++.h> using namespace std; ]; int main(){ ...

  4. jitter()函数的使用

    jitter()函数:对数值向量添加一个小的噪音量. jitter(x,factor=1,amount=NULL) ·x:数值变量,需要加入噪音的数值向量: ·factor:数值型: ·amount: ...

  5. day26

    绑定方法 分为对象绑定方法和类的绑定方法 绑定方法的特殊之处 绑定给谁就是谁来调用 类的绑定方法 绑定给类,类来调用,会把类自身传过来 不需要通过对象 ,只需要通过类就能获取到一些东西的时候,用类的绑 ...

  6. windows下PyCharm安装及使用 【转自 https://blog.csdn.net/yctjin/article/details/70307933?locationNum=11&fps=1】

    一.首先安装pycharm,可以参考这篇文章:http://www.jianshu.com/p/042324342bf4 搭建环境 1.win10_X64,其他Win版本也可以.2.PyCharm版本 ...

  7. ASI的其他使用方法

    ASI 除了设置代理监听以外还可以设置block进行监听 如果同时设置block和实现了代理方法 请求过程中 block和代理方法都会调用 一般 代理方法 优先block方法调用 第3种方式调用

  8. 《Windows内核安全与驱动开发》4.1 文件操作

    <Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发>4.1 文件操作 从 C:\a.txt 中读取一部分内容并利用 DbgPrin ...

  9. MySQL+Keepalived高可用配置

    注意:首先关闭两台机器的防火墙 setenforce 0 Environment: 2台CentOS测试机器  安装好MySQL 1.两台机器安装keepalived yum -y install k ...

  10. SpringBoot 发送邮件功能实现

    背景 有个小伙伴问我你以前发邮件功能怎么弄的.然后我就给他找了个demo,正好在此也写一下,分享给大家. 理清痛点 发送邮件,大家可以想一下,坑的地方在哪? 我觉得是三个吧. 第一:邮件白名单问题. ...