python模块分析之time和datetime模块
前言
我们使用time和datetime模块的主要目的是对时间戳、时间字符串、时间元组等时间的表述对象进行相互的转化。而我们平时编码涉及两个时间:一个是上海时间,也可以说是北京时间,一个是UTC时间,即世界协调时间;北京时间比UTC时间多了八个小时。
时间戳、时间字符串、时间元组
时间戳:一般是float的形式;
时间字符串:指的是一定格式描述时间的字符串。
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(01 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符
%Y-%m-%d %H:%M:%S # 年月日时分秒
- 时间元组:共有九个元素,可以方便数学计算
0 tm_year(年) 比如2011
1 tm_mon(月) 1 - 12
2 tm_mday(日) 1 - 31
3 tm_hour(时) 0 - 23
4 tm_min(分) 0 - 59
5 tm_sec(秒) 0 - 61
6 tm_wday(weekday) 0 - 6(0表示周日)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为-1
time模块
time模块主要有以下的函数:
time():以秒为单位以float形式返回自从1970年1月1日开始计算的当前时间
clock():返回进程作为浮点数开始时的CPU时间
sleep():以浮点数形式延迟数秒,同步阻塞;
gmtime():将从Epoch开始的秒转换为UTC时间元组
localtime():将从Epoch开始的秒转换为本地时间元组
asctime():将时间元组转换为字符串
ctime():将时间转换为秒字符串
mktime():将本地时间元组转换为从Epoch开始的秒
strftime():根据格式规范将时间元组转换为字符串
strptime():根据格式规范将字符串解析为时间元组
- 实例
import time
# 时间戳,秒为单位,float
print(time.time()) # 1547106159.3509371
# 在不同的系统上含义不同。
# 在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。
# 在WINDOWS中,第一次调用,返回的是进程运行的实际时间。
# 而第二次之后的调用是自第一次调用以后到现在的运行时间。
print(time.clock())
# 进程休眠时间
print(time.sleep(1))
# 将一个时间戳转换为UTC时区的元组时间。secs参数未提供,则以当前时间为准。
print(time.gmtime()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=10, tm_hour=7, tm_min=50, tm_sec=27, tm_wday=3, tm_yday=10, tm_isdst=0)
print(time.gmtime(1234)) # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=20, tm_sec=34, tm_wday=3, tm_yday=1, tm_isdst=0)
#注意tm_wday指的是周几,这里是从0开始的,0代表周一
# 将一个时间戳转换为本地时区的元组时间。secs参数未提供,则以当前时间为准。
print(time.localtime()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=10, tm_hour=15, tm_min=55, tm_sec=17, tm_wday=3, tm_yday=10, tm_isdst=0)
print(time.localtime(1234)) # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=20, tm_sec=34, tm_wday=3, tm_yday=1, tm_isdst=0)
# 将一个时间元组转换成时间戳
print(time.mktime(time.localtime())) # 547107729.0
print(time.mktime((2019, 1,10,15,55,17,3,20,0))) # 1547106917.0
# 将一个时间戳转换成时间字符串
print(time.ctime()) # Thu Jan 10 16:15:44 2019
print(time.ctime(time.time())) # Thu Jan 10 16:15:44 2019
print(time.ctime(1234)) # Thu Jan 1 08:20:34 1970
# 将时间元组转换成时间字符串,没有参数就会默认time.localtime()
print(time.asctime(time.localtime())) # Thu Jan 10 16:13:13 2019
print(time.asctime((2019, 1,10,15,55,17,3,20,0))) # Thu Jan 10 15:55:17 2019
# 将时间元组转化成某种格式的时间字符串
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 2019-01-10 16:20:06
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 2019-01-10 16:20:06
# 将某种格式的时间字符串转化成时间元组
print(time.strptime("2019-01-10 16:20:06", "%Y-%m-%d %H:%M:%S")) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=10, tm_hour=16, tm_min=20, tm_sec=6, tm_wday=3, tm_yday=10, tm_isdst=-1)
# 将一个时间字符串转换成时间戳
print(time.mktime(time.strptime("2019-01-10 16:20:06", "%Y-%m-%d %H:%M:%S")))
datatime模块
datatime模块顾名思义针对的是日期,主要有5个类:
datetime.date:日期对象
datetime.datetime:日期时间对象
datetime.time:时间对象
datetime.timedelta:时间间隔对象
datetime.tzinfo:时区信息对象,这个对象很少使用
date对象
date对象主要有year,month,day三个属性,其支持加减,各种比较运算符。
import datetime
date = datetime.date(2019,1,3)
print(date.year)
print(date.month)
print(date.day)
# 将时间戳转化成日期对象
d = datetime.date.fromtimestamp(123456)
# 输出今日的日期对象
d = datetime.date.today()
# 将日期对象转换为时间元组
print(d.timetuple()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=11, tm_isdst=-1)
# 将一个日期对象替换,返回新的日期对象
print(d.replace(2019,5,2)) # 2019-05-02
# 日期转时间字符串
print(d.ctime()) # Fri Jan 11 00:00:00 2019
# 日期转指定格式日期字符串
print(d.strftime("%Y %m %d")) # 2019 01 11
# 将日期标准化
dx = datetime.date(2019,5,2)
print(dx.isoformat()) # 标准化日期格式 2019-05-02
print(dx.isocalendar()) # 返回年数、周数、星期几 (2019, 18, 4)
print(dx.isoweekday()) # 返回星期几,周一为1, 4
print(dx.weekday()) # 返回星期几,周一为0 3
# 支持加减和比较运算符
d1 = datetime.date(2019,1,3)
d2 = datetime.date(2018,10,21)
print(d1-d2) # 相差的天数
print(d1 + datetime.timedelta(days=3)) # 相加的另一个必须是时间间隔对象
print(d1 > d2) # True
# 返回公历开始到现在的天数
x = datetime.date.today().toordinal()
print(x) # 737070
# 将公历开始到现在的天数转为日期对象
d = datetime.date.fromordinal(x)
print(d) # 2019-01-11
time时间对象
时间对象主要有小时、分钟、秒、微秒和tzinfo信息等属性。
import datetime
t = datetime.time(3,40,30,30)
print(t.hour) # 小时
print(t.minute) # 分钟
print(t.second) # 秒
print(t.microsecond) # 微秒
print(t.tzinfo)
# 表示的最大数值
print(t.max) # 23:59:59.999999
# 表示的最小数值
print(t.min) # 00:00:00
# 支持比较运算符
t1 = datetime.time(2,30,30,40)
t2 = datetime.time(2,40,35,40)
print(t1 < t2) # True
print(t1 != t2) # True
# 将时间对象转化iso格式
print(t1.isoformat()) # 02:30:30.000040
# 指定时间字符串格式
print(t1.strftime('%H:%M:%S')) # 02:30:30
# 替换返回一个新的时间对象
print(t1.replace(12,42,30,1000))
datetime日期时间对象
datetime对象是date和time对象的合体,方法大多继承自date,主要属性有year, month, day, hour,minute, second, microsecond(微秒)。
import datetime
dt = datetime.datetime(2019,2,3,10,30,25,200)
print(dt) # 2019-02-03 10:30:25.000200
# 属性
print(dt.year) # 2019
print(dt.month) # 2
print(dt.day) # 3
print(dt.hour) # 10
print(dt.minute) # 30
print(dt.second) # 25
print(dt.microsecond) # 200
print(dt.time())
print(dt.date())
print(dt.timetuple()) # time.struct_time(tm_year=2019, tm_mon=2, tm_mday=3, tm_hour=10, tm_min=30, tm_sec=25, tm_wday=6, tm_yday=34, tm_isdst=-1)
# 类方法
# 将时间戳转化成本地日期时间对象
print(datetime.datetime.fromtimestamp(123456))
# 将公历日期转换成日期时间对象
print(datetime.datetime.fromordinal(7777))
# 将时间戳转化成UTC日期时间对象
print(datetime.datetime.utcfromtimestamp(123456))
# 获取当前本地的时间
print(datetime.datetime.now())
# 获取当前utc时间
print(datetime.datetime.utcnow())
# 获取当前本地的时间
print(datetime.datetime.today())
# 将date对象和time对象联合成datetime对象
print(datetime.datetime.combine(datetime.date(2019,1,11), datetime.time(2))) # 2019-01-11 02:00:00
timedelta时间间隔对象
timedelta对象主要有day,hour,seconds, microseconds,milliseconds, minutes, weeks等7个属性。
import datetime
t = datetime.timedelta(days=1,seconds=30,microseconds=800,milliseconds=200,minutes=30,hours=21,weeks=2)
print(t) # 15 days, 21:30:30.200800
print(t.min) # -999999999 days, 0:00:00
print(t.max) # 999999999 days, 23:59:59.999999
# weeks+days代表的总天数
print(t.days) # 15
# hours+minutes+seconds代表的总秒数
print(t.seconds)
# milliseconds+microseconds代表的总微秒数
print(t.microseconds)
# 总时间转换成秒数
print(t.total_seconds())
# 支持加减乘除和比较运算符
t1 = datetime.timedelta(days=3)
t2 = datetime.timedelta(days=5)
print(t1+t2) # 8 days, 0:00:00
print(t1-t2) # -2 days, 0:00:00
print(t1/t2) # 1.6666666666666667
print(t1*3) # 9 days, 0:00:00
print(t1//t2) # 0
总结
time模块主要使用在时间戳、时间元组和时间字符串之间进行转换;
时间元组struct_time是连接time模块和datatime模块的桥梁;
参考
python模块分析之time和datetime模块的更多相关文章
- Python 标准类库-日期类型之datetime模块
标准类库-日期类型之datetime模块 by:授客 QQ:1033553122 可用类型 3 实践出真知 4 timedelta对象 4 class datetime.timedelta(da ...
- 函数和常用模块【day06】:datetime模块(二)
本节内容 1.datetime.datetime.now 2.datetime.date.fromtimestamp 3.datetime.timedelta 4.时间替换 1.datetime.da ...
- [ Python入门教程 ] Python中日期时间datetime模块使用实例
Python中datetime模块提供强大易用的日期处理功能,用于记录程序操作或修改时间.时间计算.日志时间显示等功能.datatime模块重新封装了time模块,提供的类包括date.time.da ...
- Python学习笔记:time模块和datetime模块(时间和日期)
time模块 time模块通常用来操作时间戳信息(各种“秒”),常用的方法有: time.sleep(seconds):将当前程序阻塞指定秒数,然后继续运行程序. time.time():返回当前时间 ...
- day5-time & datetime模块
1.概述 程序设计开发过程中,往往存在很多场景,需要把时间和日期以某种特定形式格式化输出,在python中我们需要借助time & datetime模块来实现,今天就来一探这两大模块的究竟. ...
- collections、time和datetime模块
主要内容: 一.collections模块 二.time模块 三.datetime模块 1️⃣ collection模块 1.什么是collections模块.干什么用? collections模块 ...
- python 中 模块,包, 与常用模块
一 模块 模块:就是一组功能的集合体, 我们的程序可以直接导入模块来复用模块里的功能 导入方式 一般为 : import 模块名 在python中, 模块一般分为四个通用类别 1使用python编写. ...
- OpenRisc-41-or1200的cache模块分析
引言 为CPU提供足够的,稳定的指令流和数据流是计算机体系结构设计中两个永恒的话题.为了给CPU提供指令流,需要设计分支预测机构,为了给CPU提供数据流,就需要设计cache了.其实,无论是insn还 ...
- Datetime 模块求日期差
Datetime 模块求日期差 导入 datetime 模块/实例化当前时间对象 调用.date() 方法 得到当前年/月/日时间 实例化时间差对象 delta 求当前日期减去时间差 delta 后的 ...
随机推荐
- 《Linux内核设计与实现》学习记录一
chapter1 Linux内核简介 前言:Unix是一个具有相似应用程序编程接口(API)并且基于相似设计理念的操作系统家族. 1.1 Unix的历史 1.Unix演化版实现了任务管理.换页机制.T ...
- C#ToString() 格式化数值
格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符,控制格式化输出的有效位数或小数位数. 格式说明符 说明 示例 输出 C 货币 2.5.ToString(&q ...
- 32位机和64位机下面各类型sizeof的大小
---<这种类型的题目出的太多了,还是整理下吧!>--- 一.机器平台:X86_64 处理器 操作系统:Red Hat 4.1.2-14 编译器: gcc version 4.1.2 20 ...
- 窗体的构造函数和OnCreate事件
窗体的构造函数和创建事件和OldCreateOrder属性有很大的关系. 情况1: 如果窗体继承自TForm,且有如下形式: 1. constructor TForm1.Create(AOw ...
- MySQL : 数据库和表的基本操作总结
针对database和table的操作大致可分为三类:创建,查询,修改,删除 1. 创建 create ①创建数据库 create database db_name; ②创建表 create tabl ...
- 洛谷U19464 山村游历(Wander)(LCT)
洛谷题目传送门 LCT维护子树信息常见套路详见我的总结 闲话 题目摘自WC模拟试题(by Philipsweng),原题目名Wander,"山村游历"是自己搞出来的中文名. 数据自 ...
- BZOJ刷题指南(转)
基础(65) 巨水无比(4):1214.3816:2B题:1000A+B:2462:输出10个1 模拟/枚举/暴力(15):4063傻子模拟:1968小学生暴力:1218前缀和暴力:3856读英文:4 ...
- luogu1941 [NOIp2014]飞扬的小鸟 (dp)
设f[i][j]为到达(i,j)这个位置的最小操作数 就有$f[i][j]=min\{f[i-1][j+Y[i-1]],f[i-1][j-X[i-1]*k]+k\}$ 然后考虑优化一下转移: 对于一系 ...
- 洛谷P3721 单旋
什么毒瘤...... 题意:模拟一棵单旋splay,求每次插入,splay最值,删除最值的操作次数. 解:乍一看感觉很神,又因为是LCT题单上的,然后就折磨了我好久,最后跑去看题解... 居然是手玩找 ...
- eos节点启动源码分析
在eos源码目录中programs/nodeos/main.cpp文件里,为节点启动的主函数main函数内部做了两件事1 初始化 application if(!app().initialize< ...