Python时间与日期操作(datetime、time、calendar)
相关模块
模块 | 说明 |
time | time是一个仅包含与日期和时间相关的函数和常量的模块,在本模块中定义了C/C++编写的几个类。例如,struct_time类 |
datetime | datetime是一个使用面向对象编程设计的模块,可以在Python中使用日期和时间。它定义了几个表示日期和时间的类 |
calendar | 日历是一个提供函数的模块,以及与Calendar相关的几个类,它们支持将日历映像生成为text,html,…. |
locale | 该模块包含用于格式化或基于区域设置分析日期和时间的函数。 |
UTC(CoordinatedUniversal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。
DST(DaylightSaving Time)即夏令时。是一种为节约能源而人为规定地方时间的制度,一般在天亮早的夏季人为将时间提前一小时
时间元组
Python时间函数将时间处理为9个数字的元组,各个索引所代表的字段及取值范围如下所示:
索引 | 字段 | 值 |
0 | 4位数,表示年份 | 2018,2019… |
1 | 月份 | 1 ~ 12 |
2 | 日期 | 1 ~ 31 |
3 | 小时 | 0 ~ 23 |
4 | 分钟 | 0 ~ 59 |
5 | 秒 | 0 ~ 61(60或61是闰秒) |
6 | 星期几 | 0 ~ 6(0是星期一) |
7 | 一年的第几天 | 1 ~ 366(朱利安日) |
8 | 夏令时 | 1,0,1,-1是决定是否为夏令时的旗帜 |
year (four digits, e.g. 2018)
month (1-12)
day (1-31)
hours (0-23)
minutes (0-59)
seconds (0-59)
weekday (0-6, Monday is 0)
Julian day (day in the year, 1-366)
#夏令时格式,0:正常格式,1:夏令时格式,-1:根据当前的日期时间格式来判定
DST (Daylight Savings Time) flag (-1, 0 or 1)
上面的元组相当于struct_time结构。此结构具有以下属性:
索引 | 字段 | 值 |
0 | tm_year | 2018,2019… |
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(60或61是闰秒) |
6 | tm_wday | 0 ~ 6(0是星期一) |
7 | tm_yday | 1 ~ 366(朱利安日) |
8 | tm_isdst | 1,0,1,-1是决定是否为夏令时的旗帜 |
可用如下图示表示:
time模块
time模块,它提供了处理时间和表示之间转换的功能。help(time)之后可以知道time有2种时间表示形式:
1、时间戳表示法,即以整型或浮点型表示的是一个以秒为单位的时间间隔。这个时间的基础值是从1970年的1月1号零点开始算起。
2、元组格式表示法,这个元组有9个整型内容。分别表示不同的时间含义。
编号 | 方法 | 描述 |
1 | time.time() | 返回当前时间时刻,浮点数形式秒数,不支持参数 |
2 | time.clock() | 返回当前程序的cpu执行时间。为了测量不同方法的计算成本,time.clock的值比time.time()的值更有用。unix系统始终返回全部运行时间;而windows从第二次开始都是以第一次调用此函数时的时间戳作为基准 |
3 | time.sleep(secs) | 暂停调用线程secs秒,接受整型和浮点型参数。 |
4 | time.gmtime([secs]) | 将时间戳转换为UTC时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。 |
5 | time.localtime([secs]) | 将时间戳转换为本地时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。 |
6 | time.asctime([tupletime]) | 接受时间元组,并返回一个可读的24个字符的字符串,例如’Tue Dec 11 22:07:14 2019’,默认值为localtime()返回值。 |
7 | time.ctime([secs]) | 接受时间戳,转换为字符串。其默认值为当前时间戳。函数等价于asctime(localtime(seconds))。 |
8 | time.mktime(tupletime) | 将本地时间元组,转换为时间戳(浮点值,该时间点以秒为单位表示。)。接受一个时间元组,必选。 |
9 | time.strftime(fmt[,tupletime]) | 将时间元组以指定的格式(字符串fmt指定)转换为字符串形式。接受字符串格式化串、时间元组。时间元组为可选,默认为localtime() |
10 | time.strptime(str,fmt="") |
根据格式字符串fmt解析str,并返回元组格式的时间。 strftime()的逆向过程。接受字符串,时间格式2个参数,都是必选 |
11 | time.altzone | 本地DST时区的偏移量(以秒为单位的UTC)。 |
12 | time.tzset() | 改变本地时区 |
时间字符串支持的格式符号:
格式 含义 备注
%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 时区的名字(如果不存在为空字符)
%% ‘%’字符
注意:
1、“%p”只有与“%I”配合使用才有效果。
2、文档中强调确实是0-61,而不是59,闰年秒占两秒
3、当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%和%W才会被计算
time模块重要属性
序号 | 属性 | 说明 |
1 | time.timezone | UTC和本地时区(不含DST)之间的偏移量,以秒计 |
2 | time.tzname | 关于(标准时区名称, 夏令时时区名称)的元组 |
3 | time.altzone | 当地夏令时时间与标准UTC时间的误差,以秒计 |
4 | time.daylight | 当地时间是否反映夏令时,默认为0 |
time模块实例
import time ticks = time.time() # 这种格式不能表示在时代(1970年1月1日上午12:00)之前的日期。只能表示之后日期并且截止点为3038年的某个时刻,在未来的日子也不能以这种方式表示
print("Number of ticks since 12:00am, January 1, 1970:", ticks) # 获取当前本地时间
localtime =time.localtime(time.time())
print("Local current time :", localtime) # 当前时间格式化
curtime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print(curtime)
# 也可以使用asctime()进行时间格式化
print(time.asctime(localtime))
结果:
Number of ticks since 12:00am, January 1, 1970: 1541039190.1566076
Local current time : time.struct_time(tm_year=2018, tm_mon=11, tm_mday=1, tm_hour=10, tm_min=26, tm_sec=30, tm_wday=3, tm_yday=305, tm_isdst=0)
2018-11-01 10:26:30
Thu Nov 1 10:26:30 2018
Calendar
模块
calendar模块提供与日历相关的功能,包括为给定的月份或年份打印文本日历的功能。
默认情况下,日历将星期一作为一周的第一天,将星期日作为最后一天。如果想要更改这个,可调用calendar.setfirstweekday()函数设置修改。
以下是calendar模块可用的功能函数列表
序号 | 函数 | 描述 |
1 | Calendar(year,w = 2,l = 1,c = 6) | 返回一个具有年份日历的多行字符串格式化为三列,以c个空格分隔。 w是每个日期的字符宽度;每行的长度为21 * w + 18 + 2 * c,l是每周的行数。 |
2 | firstweekday( ) | 返回当前设置每周开始的星期。默认情况下,当日历首次导入时设置为:0,表示为星期一。 |
3 | isleap(year) | 如果给定年份(year)是闰年则返回True;否则返回:False。 |
4 | leapdays(y1,y2) | 返回在范围(y1,y2)内的年份中的闰年总数。 |
5 | Month(year,month,w = 2,l = 1) | 返回一个多行字符串,其中包含年份月份的日历,每周一行和两个标题行。 w是每个日期的字符宽度;每行的长度为7 * w + 6。 l是每周的行数 |
6 | Monthcalendar(year,month) | 返回int类型的列表。每个子列表表示一个星期。年份月份以外的天数设置为0;该月内的日期设定为月份的第几日:1 ~ 31 |
7 | Monthrange(year,month) | 返回两个整数。第一个是年度月(month)的星期几的代码;第二个是当月的天数。表示星期几为0(星期一)至6(星期日);月份是1到12 |
8 | Prcal(year,w = 2,l = 1,c = 6) | 类似于:calendar.calendar(year,w,l,c)的打印 |
9 | Prmonth(year,month,w = 2,l = 1) | 类似于:calendar.month(year,month,w,l)的打印 |
10 | setfirstweekday(weekday) | 将每周的第一天设置为星期几的代码。星期几的代码为0(星期一)至6(星期日)。 |
11 | timegm(tupletime) | time.gmtime的倒数:以时间元组的形式接受时刻,并返回与从时代(epoch)开始的浮点数相同的时刻。 |
12 | weekday(year,month,day) | 返回给定日期的星期几的代码。星期几的代码为0(星期一)至6(星期日);月数是1(1月)到12(12月)。 |
calendar模块实例
import calendar # 获取一个月的日历
cal = calendar.month(2018, 10);
print("Here is the calendar:");
print(cal);
结果:
Here is the calendar:
October 2018
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
datetime
模块
datetime是Python处理日期和时间的标准库。需要注意的是,datetime是一个模块,这个模块里面有datetime类,此外常用的还有date类,以及time类。
datetime模块使用实例:
from datetime import date
from datetime import datetime
from datetime import timedelta # 计算两个日期相差多少天
d1 = date(2018, 10, 18);
d2 = date(2017, 12, 31); print("(2018, 10, 18)与(2017, 12, 31)相差:", (d1 - d2).days, "天!"); # 获取两个日期时间的时间差
time1 = datetime(2019, 1, 13, 12, 0, 0);
time2 = datetime.now();
differtime = (time1 -time2).total_seconds();
print("(2019,1,13,12,0,0)与当前时间相差:", differtime, "秒!");# 输出结果 # 当前日期
curdate = date.today();
print("curdate =",curdate); # 计算十天之后的日期时间
nowday = datetime.now();
# timedelta类可以很容易地算出前几天和后几天的时刻。(timedelta(days= d, hours= h))
# 还可以查看第几周对应的时间,例如:timedelta(weeks=20) 20周将被自动转化为天数
# 前几天时刻,用减法。 后几天时刻,则用当前时间加上timedelta(days = d, hours= h)
lastday = nowday + timedelta(days=10);
print(str(lastday));
print(lastday.ctime());# ctime() 返回一个表示日期和时间的字符串。 # 查看某一天是今年的第几天和第几周
testday = date(2017, 8, 31);
print(testday.isocalendar());# isocalendar() 函数返回三元组 分别为:年份,周数,周几
print(testday.timetuple());# timetuple() 返回时间元祖
结果:
(2018, 10, 18)与(2017, 12, 31)相差: 291 天!
(2019,1,13,12,0,0)与当前时间相差: 6311998.358155 秒!
curdate = 2018-11-01
2018-11-11 10:40:01.641845
Sun Nov 11 10:40:01 2018
(2017, 35, 4)
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=243, tm_isdst=-1)
其他程序实例:计算程序运行时间
# 统计程序运行时间的程序
import time
# datetime是一个模块,模块里面有一个datetime类,所以可以from datetime importdatetime
import datetime # 方法一(性能最差)
starttime = datetime.datetime.now()
time.sleep(2)
endtime = datetime.datetime.now()
print((endtime - starttime).seconds) # 方法二
start = time.time()
time.sleep(2)
end = time.time()
print(end- start) # 方法1和方法2都包含了其他程序使用CPU的时间,是程序开始到程序结束的运行时间。 # 推荐方法3 (只计算了程序运行的CPU时间)
first = time.clock()
time.sleep(2)
second = time.clock();
print(second- first) # 要实现跨平台的精度性,也可以使用timeit 来代替time.
import timeit starttime2 = timeit.default_timer()
time.sleep(2)
endtime2 = timeit.default_timer()
print(str(endtime2 - starttime2))
结果:
2
2.0009114742279053
2.0007298604141965
2.000633781133109
Python时间与日期操作(datetime、time、calendar)的更多相关文章
- Lua库之时间和日期操作
Lua库之时间和日期操作 (2010-02-07 18:41:20) 转载▼ os.time() <== 返回当前系统的日历时间os.date() <== 返回本地化的时间字符串,这里是& ...
- Python标准库02 时间与日期 (time, datetime包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python具有良好的时间和日期管理功能.实际上,计算机只会维护一个挂钟时间(wa ...
- 使用日期操作类(Calendar)获得几秒、几分钟、几小时之前的时间
public String dealDate(String case_time){ // 日期操作类 Calendar calendar = Calendar.getInstance(); // 当前 ...
- (转)Python标准库02 时间与日期 (time, datetime包)
原文:http://www.cnblogs.com/vamei/archive/2012/09/03/2669426.html https://www.liaoxuefeng.com/wiki/001 ...
- python3笔记二十一:时间操作datetime和calendar
一:学习内容 datetime calendar 二:datetime 1.模块说明:可以理解为datetime基于time进行了封装,提供了各种使用的函数,datetime模块的接口更直接,更容易调 ...
- python时间模块time,datetime
时间模块time.datetime 模块(module)是 Python 中非常重要的东西,你可以把它理解为 Python 的扩展工具.换言之,Python 默认情况下提供了一些可用的东西,但是这些默 ...
- Python时间、日期、时间戳之间的转换
一.字符串与为时间字符串之间的互相转换 方法:time模块下的strptime方法 a = "2012-11-11 23:40:00" # 字符串转换为时间字符串 import t ...
- python 时间及日期函数
本人最近新学python ,用到关于时间和日期的函数,经过一番研究,从网上查找资料,经过测试,总结了一下相关的方法. import timeimport datetime '''时间转化为时间戳: 2 ...
- Python时间,日期,时间戳之间转换,时间转换时间戳,Python时间戳转换时间,Python时间转换时间戳
#1.将字符串的时间转换为时间戳方法: a = "2013-10-10 23:40:00" #将其转换为时间数组 import time timeArray = time.strp ...
随机推荐
- 配置 VS Code 调试 PHP
配置 VS Code 调试 PHP 1.下载 xampp 集成服务器wampserver3.1.0-Apache2.4.7_PHP5.6.3-7.0.23-7.1.19_MySQL5.7.19_Mar ...
- cmd命令,输出为txt文本
在命令行后面,加上'-t > d:output.txt'. 具体可参考如下图: //=====补充===== 所以,在调试nodejs的时候,如果用命令行调试,则可把输出信息都重定向到一个文件中 ...
- 可定制的分词库——Yaha(哑哈)分词
可定制的分词库——Yaha(哑哈)分词在线测试地址:http://yaha.v-find.com/ 部署于GAE yahademo.appspot.comYaha分词主要特点是把分词过程分成了4个阶段 ...
- 关于SCANF接受的一些总结
当C语言中SCANF函数接受到非指定类型的参数时,如:定义为整形输入为字符串,函数会返回一个失败的BOOL类型,以此可以判断是否输入的为指定类型. 当发生一次输入错误的时候,如果想再次进行输入则需要使 ...
- [matlab]机器学习及SVM工具箱学习笔记
机器学习与神经网络的关系: 机器学习是目的,神经网络是算法.神经网络是实现机器学习的一种方法,平行于SVM. 常用的两种工具:svm tool.libsvm SVM分为SVC和SVR,svc是专门用来 ...
- 解决PCL MLS : error LNK2019; error LNK2001 virtual MovingLeastSquares process performProcessing问题
PCL 基于多项式拟合的法线估计.点云平滑和数据重采样 在使用Window VS2010为开发平台,学习PCL点云库的时候,学到曲面重建(Surface).在测试下面的程序的时候,遇到了问题. #in ...
- 安装json format插件
更多工具->扩展->搜索:son format插件 这样得到的json数据以一种美观的样式显示.
- Spring入门第二十三课
我们看基于XML配置的方式配置AOP 看代码: package logan.study.aop.impl; public interface ArithmeticCalculator { int ad ...
- java中的几种架构对象(PO,VO,DAO,BO,POJO)
java中的几种对象(PO,VO,DAO,BO,POJO) 一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生 ...
- 18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613) phpMyAdmin是一套开源的.基于Web的MySQL数据库管理工具.其index.php中存在一处文件包含逻辑, ...