1. 时间日期处理
python和时间有关的标准库模块常用的主要有3个
- 基本时间模块
time
- 日历模块
calendar
- 时间日历模块
datetime
1.1. 一图流时间日期处理的方法介绍
1.2. 基本时间模块time
time 模块中一般有三种表示时间的方式:
第一种是时间戳(timestamp)的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的,也是各种语言通用的.有的语言如java,js时间以ms记,所以处理的时候注意下,适当的时候
/1000
第二种以数组的形式表示即(struct_time,结构化时间),共有九个元素,分别表示,同一个时间戳的struct_time会因为时区不同而不同
元素属性 | 范围及说明 |
---|---|
year | (four digits, e.g. 1998) |
month | (1-12) |
day | (1-31) |
hours | (0-23) |
minutes | (0-59) |
seconds | (0-59) |
weekday | (0-6, Monday is 0) |
Julian day | (一年中的第几天, 1-366) |
DST | (-1, 0 or 1) 是否是夏令时,</br>0说明是不是,1说明是,-1说明不确定 |
- 第三种是字符串表述,也就我们可以直接看懂的形式
可以用如下的符号格式化字符串输出:
符号 | 意思及取值范围 |
---|---|
%y | 两位数的年份表示(00-99) |
%Y | 四位数的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月内中的一天(0-31) |
%H | 24小时制小时数(0-23) |
%I | 12小时制小时数(01-12) |
%M | 分钟数(00=59) |
%S | 秒(00-59) |
%a | 本地简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化的月份名称 |
%B | 本地完整的月份名称 |
%c | 本地相应的日期表示和时间表示 |
%j | 年内的一天(001-366) |
%p | 本地A.M.或P.M.的等价符 |
%U | 一年中的星期数(00-53)星期天为星期的开始 |
%w | 星期(0-6),星期天为星期的开始 |
%W | 一年中的星期数(00-53)星期一为星期的开始 |
%x | 本地相应的日期表示 |
%X | 本地相应的时间表示 |
%Z | 当前时区的名称 |
%% | %号本身 |
import time
1.2.1. 时间获取
获取当前时间戳 time()
now_timestamp = time.time() now_timestamp
1498831412.6540039
获取当前结构化时间 localtime()
now_struct = time.localtime() now_struct
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
直接获取当前时间字符串 asctime()
time.asctime()
'Fri Jun 30 22:03:33 2017'
1.2.2. 时间表现形式转化
时间戳=>结构化时间 localtime() gmtime()
# 当前时区 time.localtime(now_timestamp)
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=32, tm_wday=4, tm_yday=181, tm_isdst=0)
# UTC时区(0时区) time.gmtime(now_timestamp)
now_timestamp = time.time() now_timestamp
0
结构化时间=>时间戳 mktime()
now_timestamp = time.time() now_timestamp
1
now_timestamp = time.time() now_timestamp
2
结构化时间=>字符串 asctime() strftime()
now_timestamp = time.time() now_timestamp
3
'Fri Jun 30 22:03:33 2017'
now_timestamp = time.time() now_timestamp
5
now_timestamp = time.time() now_timestamp
6
时间戳=>字符串 ctime()
now_timestamp = time.time() now_timestamp
7
now_timestamp = time.time() now_timestamp
8
将格式化字符串转化为时间戳
now_timestamp = time.time() now_timestamp
9
1498831412.6540039
0
将格式化字符串转化为结构化时间
1498831412.6540039
1
1498831412.6540039
2
1.2.3. 特殊函数
线程推迟指点时间 sleep(sec)
1498831412.6540039
3
1.3. 基本的日历模块calendar
calendar模块,即日历模块,提供了对日期的一些操作方法,和生成日历的方法。
主要提供的常量(用list查看):
常量 | 说明 |
---|---|
calendar.day_name | 一周的星期几名字 |
calendar.day_abbr | 一周的星期几名字的简写 |
calendar.month_name | 月份名字 |
calendar.month_abbr | 月份名字的简写 |
主要的方法有:
方法 | 说明 |
---|---|
calendar.setfirstweekday(weekday) | 设置日历中星期的的第一天是周几 |
calendar.firstweekday() | 查看日历中一星期的第一天是周几(在列表中的位置) |
calendar.isleap(year) | 判断是否是闰年 |
calendar.leapdays(y1, y2) | 获取两个年份之间闰年数 |
calendar.weekday(year, month, day) | 查看某一天是星期几(在列表中的位置) |
calendar.weekheader(n) | 返回星期几的英文缩写,n表示用几位字母 |
calendar.monthrange(year, month) | 返回第一天是周几(列表中位置和月的长度) |
calendar.monthcalendar(year, month) | 返回一个表示日历的二维数组 |
calendar.prmonth(theyear, themonth, w=0, l=0) | 直接打印日历 |
calendar.month(theyear, themonth, w=0, l=0) | 返回某月的日历文本 |
calendar.prcal(year, w=0, l=0, c=6, m=3) | 打印一年的日历 |
calendar.calendar(year, w=2, l=1, c=6, m=3) | 返回一年日历的字符串 |
calendar.timegm(tuple) | 把一个 UTC 的 struct_time 转化为 POSIX 时间戳 |
其中有三个主要的类型可以实例化:
calendar.Calendar(firstweekday=0)
该类提供了许多生成器,如星期的生成器,某月日历生成器. 主要有:
iterweekdays() 返回一周几天的生成器
itermonthdates(year, month) 返回某月的每一天的datetime构成的生成器
itermonthdays2(year, month) 返回某月的每一天的(日期,星期)构成的生成器
itermonthdays(year, month) 返回某月的每一天的日期构成的生成器
monthdatescalendar(year, month) 返回某月的每一天的datetime构成的list(每周是一个list)
monthdays2calendar(year, month) 返回某月的每一天的(日期,星期)构成的list(每周是一个list)
monthdayscalendar(year, month) 返回某月的每一天的日期构成的list(每周是一个list)
yeardatescalendar(year, width=3) 返回某年的每一天的datetime构成的list(每月一个list,每周是一个list)
yeardays2calendar(year, width=3) 返回某年的每一天的(日期,星期)构成的list(每月一个list,每周是一个list)
yeardayscalendar(year, width=3) 返回某年的每一天的日期构成的list(每月一个list,每周是一个list)
calendar.TextCalendar(firstweekday=0)
该类提供了按月、按年生成日历字符串的方法。 主要有:
方法 | 说明 |
---|---|
formatmonth(theyear, themonth, w=0, l=0) | 返回某月的日历字符串 |
prmonth(theyear, themonth, w=0, l=0) | 打印某月的日历字符串 |
formatyear(theyear, w=2, l=1, c=6, m=3) | 返回某年的日历字符串 |
pryear(theyear, w=2, l=1, c=6, m=3) | 打印某年的日历字符串 |
子类有:
calendar.LocaleTextCalendar(firstweekday=0, locale=None)
用来生成本地日历,主要就是月份和星期的本地语言化,locale默认是计算机的locale
calendar.HTMLCalendar(firstweekday=0)
类似TextCalendar,不过生成的是HTML格式日历 主要有:
formatmonth(theyear, themonth, withyear=True) 返回某月的日历的html字符串
formatyear(theyear, width=3) 返回某年的日历的html字符串
formatyearpage(theyear, width=3, css='calendar.css', encoding=None) 返回完整的页面代码的字符串
子类有:
calendar.LocaleHTMLCalendar(firstweekday=0, locale=None)
用来生成本地日历,主要就是月份和星期的本地语言化,locale默认是计算机的locale
1498831412.6540039
4
1498831412.6540039
5
1498831412.6540039
6
1.4. 最常用的时间日历模块 datetime
datetime同样是python标准库,不过它看起来就很OO很现代了~它用一个叫datetime的类型来表示时间,一般来说,做时间的计算会用它而不是time模块
1498831412.6540039
7
获取datetime 时间
获取当前日期和时间 datetime.now()
1498831412.6540039
8
1498831412.6540039
9
now_struct = time.localtime() now_struct
0
now_struct = time.localtime() now_struct
1
获取某一时间datetime()
now_struct = time.localtime() now_struct
2
now_struct = time.localtime() now_struct
3
datetime => 时间戳 .timestamp()
now_struct = time.localtime() now_struct
4
now_struct = time.localtime() now_struct
5
时间戳 => datetime
本地时间
now_struct = time.localtime() now_struct
6
now_struct = time.localtime() now_struct
7
UTC标准时间
now_struct = time.localtime() now_struct
8
now_struct = time.localtime() now_struct
9
格式化字符串 => datetime
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
0
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
1
datetime => 格式化字符串
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
2
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
3
时间计算
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
4
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
5
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
6
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
7
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
8
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=30, tm_hour=22, tm_min=3, tm_sec=33, tm_wday=4, tm_yday=181, tm_isdst=0)
9
time.asctime()
0
time.asctime()
1
time.asctime()
2
time.asctime()
3
time.asctime()
4
time.asctime()
5
time.asctime()
6
time.asctime()
7
time.asctime()
8
time.asctime()
9
1.5. 支持链式表达式和时区转换的时间处理模块
moment是一个开源,接口仿照js库moment的时间处理模块,支持链式表达式
他的好处是用链式表达式可以写起来很顺畅
可以使用pip安装,以下是官方的例子,要用的话可以对着例子找接口
'Fri Jun 30 22:03:33 2017'
0
'Fri Jun 30 22:03:33 2017'
1
'Fri Jun 30 22:03:33 2017'
2
还没有评论,来说两句吧...