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 21.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 9now_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 3datetime => 时间戳 .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 7UTC标准时间
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) 1datetime => 格式化字符串
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) 5time.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) 8time.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() 2time.asctime() 3 time.asctime() 4time.asctime() 5 time.asctime() 6 time.asctime() 7time.asctime() 8 time.asctime() 91.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 




还没有评论,来说两句吧...