17-[模块]-time&datetime
1.表示时间time方式
在Python中,用三种方式来表示时间,分别是时间戳、格式化时间字符串和结构化时间
1.时间戳(timestamp):也就是1970年1月1日之后的秒,
例如1506388236.216345,可以通过time.time()获得。时间戳是一个浮点数,可以进行加减运算,但请注意不要让结果超出取值范围。 2.格式化的时间字符串(string_time):也就是年月日时分秒这样的我们常见的时间字符串,
例如2017-09-26 09:12:48,可以通过time.localtime()获得; 3,结构化时间(struct_time):一个包含了年月日时分秒的多元元组,
例如time.struct_time(tm_year=2017, tm_mon=9, tm_mday=26, tm_hour=9, tm_min=14, tm_sec=50, tm_wday=1, tm_yday=269, tm_isdst=0),可以通过time.strftime('%Y-%m-%d')获得。
由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。time模块目前只支持到2038年前。如果需要处理范围之外的日期,请使用datetime模块。
UTC(Coordinated Universal Time,世界协调时),亦即格林威治天文时间,世界标准时间。我们中国为东八区,比UTC早8个小时,也就是UTC+8。关于UTC的缩写,有个故事,你可能已经注意到了,按英文的缩写,应该是CUT,而不是UTC。但是世界协调时在法文中的缩写是TUC,两国互相不让,作为妥协,最后干脆简称UTC。
DST(Daylight Saving Time)即夏令时。
2.time模块的方法
- time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
- time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
- time.time():返回当前时间的时间戳。
- time.mktime(t):将一个struct_time转化为时间戳。
- time.sleep(secs):线程推迟指定的时间运行。单位为秒。
- time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。
- time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。
- 举例:time.strftime("%Y-%m-%d %X", time.localtime()) #输出'2017-10-01 12:14:23'
time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
- 举例:time.strptime('2017-10-3 17:54',"%Y-%m-%d %H:%M") #输出 time.struct_time(tm_year=2017, tm_mon=10, tm_mday=3, tm_hour=17, tm_min=54, tm_sec=0, tm_wday=1, tm_yday=276, tm_isdst=-1)
# time.time() 方法 :当前时间戳
In [22]: import time In [23]: time.time()
Out[23]: 1518865113.717425 In [24]: time.time()/3600/24/365
Out[24]: 48.1628973505411 In [25]: time.time()/3600/24/365 + 1970
Out[25]: 2018.1628977987789
3.结构化时间
结构化时间元组共有9个元素,按顺序排列如下表: 索引 属性 取值范围
0 tm_year(年) 比如2017
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.localtime() 该时区 当前时间的 时间戳转换为结构化时间
In [26]: time.localtime()
Out[26]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=17, tm_hour=18, tm_min=59, tm_sec=17, tm_w
day=5, tm_yday=48, tm_isdst=0) In [27]: a = time.localtime() In [28]: a.tm_year
Out[28]: 2018 In [29]: a.tm_mon
Out[29]: 2 In [30]: "%s-%s-%s"%(a.tm_year,a.tm_mon,a.tm_mday) # 格式化输出
Out[30]: '2018-2-17'
# 0时区 当前时间 结构化时间
In [31]: time.gmtime()
Out[31]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=17, tm_hour=11, tm_min=2, tm_sec=29, tm_wday=5, tm_yday=48, tm_isdst=0)
# 结构化转换为时间戳
In [33]: time.mktime(a)
Out[33]: 1518865175.0 In [34]: a
Out[34]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=17, tm_hour=18, tm_min=59, tm_sec=35, tm_wday=5, tm_yday=48, tm_isdst=0)
# 表示为这种形式:'Sun Oct 1 12:04:38 2017'
In [44]: time.asctime()
Out[44]: 'Sat Feb 17 19:08:53 2018' # 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式
In [45]: time.ctime()
Out[45]: 'Sat Feb 17 19:09:32 2018'
In [46]: time.ctime(123232)
Out[46]: 'Fri Jan 2 18:13:52 1970' In [47]: time.ctime(0)
Out[47]: 'Thu Jan 1 08:00:00 1970' In [48]: time.ctime(+100)
Out[48]: 'Thu Jan 1 08:01:40 1970' In [49]: time.ctime(+1000000)
Out[49]: 'Mon Jan 12 21:46:40 1970' In [50]: time.ctime(+10000000000)
Out[50]: 'Sun Nov 21 01:46:40 2286'
4.格式化时间
格式 含义
%a 本地星期名称的简写(如星期四为Thu)
%A 本地星期名称的全称(如星期四为Thursday)
%b 本地月份名称的简写(如八月份为agu)
%B 本地月份名称的全称(如八月份为august)
%c 本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06)
%d 一个月中的第几天(01 - 31)
%f 微秒(范围0.999999)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,0 - 11)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的标识符
%S 秒(00 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之 前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期字符串(如15/08/01)
%X 本地相应时间字符串(如08:08:10)
%y 去掉世纪的年份(00 - 99)两个数字表示的年份
%Y 完整的年份(4个数字表示年份)
%z 与UTC时间的间隔(如果是本地时间,返回空字符串)
%Z 时区的名字(如果是本地时间,返回空字符串)
%% ‘%’字符
# strftime() 格式化时间
In [56]: a
Out[56]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=17, tm_hour=18, tm_min=59, tm_sec=35, tm_wday=5, tm_yday=48, tm_isdst=0) In [55]: time.strftime('%Y-%m-%d')
Out[55]: '2018-02-17' In [57]: time.strftime('%Y-%m-%d %H:%M:%S',a)
Out[57]: '2018-02-17 18:59:35' In [58]: time.strftime('%Y-%m-%d %H:%M:%S %A',a)
Out[58]: '2018-02-17 18:59:35 Saturday' In [59]: time.strftime('%Y-%m-%d %H:%M:%S %a',a)
Out[59]: '2018-02-17 18:59:35 Sat' In [60]: time.strftime('%Y-%m-%d %H:%M:%S %p',a)
Out[60]: '2018-02-17 18:59:35 PM' In [61]: time.strftime('%Y-%m-%d %H:%M:%S %U',a)
Out[61]: '2018-02-17 18:59:35 06' In [64]: time.strftime('%Y-%m-%d %H:%M:%S %U')
Out[64]: '2018-02-17 19:14:29 06' In [65]: time.strftime('%Y-%m-%d %H:%M:%S %w')
Out[65]: '2018-02-17 19:14:33 6' In [66]: time.strftime('%Y-%m-%d %H:%M:%S %W')
Out[66]: '2018-02-17 19:14:36 07' In [67]: time.strftime('%Y-%m-%d %H:%M:%S %z')
Out[67]: '2018-02-17 19:14:39 Öйú±ê׼ʱ¼ä' In [68]: time.strftime('%Y-%m-%d %H:%M:%S %Z')
Out[68]: '2018-02-17 19:14:44 Öйú±ê׼ʱ¼ä'
5.转换关系
6.datetime模块
相比于time模块,datetime模块的接口则更直观、更容易调用
datetime模块定义了下面这几个类:
datetime.date:表示日期的类。常用的属性有year, month, day;
datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
datetime.datetime:表示日期时间。
datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册)
我们需要记住的方法仅以下几个:
1.d=datetime.datetime.now() 返回当前的datetime日期类型
d.timestamp(),d.today(), d.year,d.timetuple()等方法可以调用
In [5]: datetime.datetime.now()
Out[5]: datetime.datetime(2018, 2, 17, 19, 22, 27, 966803) In [9]: d.timestamp()
Out[9]: 1518866577.650586 In [10]: d.today()
Out[10]: datetime.datetime(2018, 2, 17, 19, 23, 17, 125420) In [11]: d.year
Out[11]: 2018 In [12]: d.timetuple()
Out[12]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=17, tm_hour=19, tm_min=22, tm_sec=57, tm_wday=5, tm_yday=48, tm_isdst=-1)
2.datetime.date.fromtimestamp(322222) 把一个时间戳转为datetime日期类型
In [13]: datetime.date.fromtimestamp(3232323)
Out[13]: datetime.date(1970, 2, 7)
3.时间运算
>>> datetime.datetime.now()
datetime.datetime(2017, 10, 1, 12, 53, 11, 821218) >>> datetime.datetime.now() + datetime.timedelta(4) #当前时间 +4天
datetime.datetime(2017, 10, 5, 12, 53, 35, 276589) >>> datetime.datetime.now() + datetime.timedelta(hours=4) #当前时间+4小时
datetime.datetime(2017, 10, 1, 16, 53, 42, 876275)
In [21]: datetime.datetime.now() + datetime.timedelta(years=4)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-21-764417f227f6> in <module>()
----> 1 datetime.datetime.now() + datetime.timedelta(years=4) TypeError: 'years' is an invalid keyword argument for this function
4.时间替换
>>> d.replace(year=2999,month=11,day=30) datetime.date(2999, 11, 30)
17-[模块]-time&datetime的更多相关文章
- Python datetime模块的datetime类
datetime模块定义了下面这几个类: datetime.date:表示日期的类.常用的属性有year, month, day. datetime.time:表示时间的类.常用的属性有hour, m ...
- python3 time模块与datetime模块
time模块 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平 ...
- python 时间模块(time ,datetime,calendar)
Python中提供了时间相关的内置模块,我们主要用的是:time模块.datetime模块和calendar模块 ⽇期格式化的标准: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(00 ...
- Python常用模块time & datetime &random 模块
时间模块前言 在Python中,与时间处理有关的模块就包括:time,datetime 一.在Python中,通常有这几种方式来表示时间: 时间戳 格式化的时间字符串 元组(struct_time)共 ...
- python內建模块之datetime
from:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193755 ...
- Python3之时间模块time & datetime & calendar
一. 简介 python 提供很多方式处理日期与时间,转换日期格式是一个常见的功能. 时间元组:很多python函数用一个元组装起来的9组数字处理时间. python中时间日期格式化符号: %y 两位 ...
- python入门之time模块和datetime模块
time模块 时间三种表示:时间戳(秒单位),struct_time(元组,可以分开调用),指定格式(格式化) time.sleep() 等待5秒钟 time.time() 返回时间戳 time.ct ...
- python模块之datetime
相比于time模块,datetime模块的接口则更直观.更容易调用 datetime模块定义了下面这几个类: datetime.date:表示日期的类.常用的属性有year, month, day: ...
- python中datetime模块中datetime对象的使用方法
本文只讲述datetime模块中datetime对象的一些常用的方法,如果读者需要更多datetime模块的信息,请查阅此文档. datetime模块的对象有如下: timedelta date da ...
- re模块、collections模块、time模块、datetime模块
正则表达式之re模块 re.findall用法(重要) re.findall( '正则表达式' , '待匹配的字符' ) 找出所有的目标字符,用列表的形式展现,如果找不到返回空列表. import r ...
随机推荐
- Oracle EBS 计划请求
SELECT fcp.concurrent_program_name, decode(fcre.description, NULL, fcpt.user_concurrent_program_name ...
- .net网站转到出错页是如何实现的
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm"><error s ...
- 将jsonModel转化为文件
将jsonModel转化为文件 这个类是我自己写着用的,用于将字典文件直接转换成Model的文件,省去你写无数Model中属性的代码: TransformDictionary.h 与 Transfor ...
- wxpython 编程触发菜单或按钮事件
最近逐步熟悉wxpython,编写了几个小小功能的GUI程序,GUI中免不了会有在代码中触发控件事件的业务需求.在其他Gui界面的语言中有postevent.triggerevent 调用事件名称的函 ...
- Linux架构之简述企业网站简述
简述企业网站 用户 --> 负载均衡服务器(Nginx) ->根据扩展名访问不同的服务区 ->访问数据库 ->返回用户 静态服务器&&动态 ...
- 【matlab】 幂法 求解最大特征值
一. 算法: 1.输入矩阵A,初始向量x误差限ep,最大迭代次数N 2.置 k = 1, m1 = 0; 3.求Xr-> norm(x) abs(Xr)=max[Xi] 1<=i< ...
- Angular总结三:组件
Angular 的应用就是一棵组件树,一个页面可以是一个组件,某一页面的一个区块也可以是一个组件.为了弄明白组件及组件树,我将原来做过的一个静态网站进行组件改造. 原项目地址 https://gith ...
- Centos7.3 坑爹网络配置
1.目的: 我想在Vmvare配置成NAT模式的上网,因为这个模式宿主机可以访问虚拟机,虚拟机也可以访问宿主机,但仅主机模式只能是宿主机能访问虚拟机,但虚拟机不能访问宿主机.所以我为了能在虚拟机里面上 ...
- 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
import java.util.ArrayList; import java.util.Scanner; public class Text { @SuppressWarnings("re ...
- 用php代码统计数据库中符合条件的行数
$sql1 = "select count(*) from t_user where age<17"; $data1 = mysql_query($sql1); $rows1 ...