目录
Python标准库中提供了时间和日期的支持:
-
calendar:日历相关;
-
time、datetime:时间相关;
格式化当前时间:
- time模块:time.strftime('%Y-%m-%d', time.localtime(time.time()))
- datetime模块:datetime.datetime.now().strftime('%Y-%m-%d')
time模块
时间的主要三种表示方式:
-
时间戳:1970-1-1至今的秒数(float),time.time();
-
格式化时间字符串:如'2018-11- 07 20:23',time.strftime('%Y-%m-%d', struct_time);
-
结构化时间time.struct_time:包含年月日等的元组,time.localtime(tm);
时间格式化
格式 | 说明 |
---|---|
%a | 显示简化星期名称 |
%A | 显示完整星期名称 |
%b | 显示简化月份名称 |
%B | 显示完整月份名称 |
%c | 本地相应的日期和时间表示 'Thu Nov 8 09:31:15 2018' |
%d | 显示当月第几天 |
%f | 显示当前微妙数 |
%H | 按24小时制显示小时 |
%I | 按12小时制显示小时 |
%j | 显示当年第几天 |
%m | 显示月份 |
%M | 显示分钟数 |
%p | 本地am或者pm的相应符 |
%S | 显示秒数 |
%U | 一年中的星期数 |
%w | 显示在星期中的第几天,默认从0开始表示周一 |
%W | 和%U基本相同 |
%x | 本地相应日期(09:27:21) |
%X | 本地相应时间'月/日/年'(10/29/18) |
%y | 去掉世纪的年份(00 - 99) |
%Y | 完整的年份 |
%Z | 时区的名字(如果不存在为空字符) |
%% | '%'字符串 |
输出精确到毫秒(%f为微妙,去掉后三位则近似毫秒):
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
struct_time
struct_time是一个9元组:
序号 | 属性 | 值 |
---|---|---|
0 | tm_year | 2008 |
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;1为夏令时,0为非 |
time模块中主要函数
-
time.time():返回当前时间的时间戳(1970纪元后经过的浮点秒数);
-
time.mktime(tupletime):接受时间元组(struct_time),并返回时间戳;
-
time.localtime([secs]):接受时间辍(默认为当前时间),并返回当地时间下的时间元组t;
-
time.gmtime([secs]):接受时间辍(默认为当前时间)并返回格林威治时间的时间元组t(t.tm_isdst始终为0);
-
time.mktime(tupletime):接受时间元组并返回时间戳;
-
time.strftime(fmt[,tupletime]):接受时间元组(默认当前时间),并返回以可读字符串表示的当地时间,格式由fmt决定;
-
time.strptime(str,fmt='%a %b %d %H:%M:%S %Y'):根据fmt的格式把一个时间字符串解析为时间元组;
-
time.asctime([tupletime]):接受时间元组并返回一个可读的形式为"Thu Nov 8 09:31:15 2018"的24字符的字符串;
-
time.ctime([secs]):作用相当于asctime(localtime(secs)),未给参数相当于asctime();
-
time.tzset():根据环境变量TZ重新初始化时间相关设置
休眠及运行时间
-
time.sleep(secs):休眠指定的秒数(float,0.001则1毫秒);
-
time.perf_counter():返回计时器的精准时间(系统的运行时间),包含系统的睡眠时间;一般使用多次调用的结果之差;
-
time.clock( ):用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用(3.3后用perf_counter);
datetime模块
datetime模块中包含如下类:
-
date:日期对象,常用的属性有year, month, day
-
time:时间对象
-
datetime:日期时间对象,常用的属性有hour, minute, second, microsecond
-
datetime_CAPI:日期时间对象C语言接口
-
timedelta:时间间隔,即两个时间点之间的长度
-
tzinfo:时区信息对象
包含的常量:
-
datetime.MAXYEAR:返回能表示的最大年份9999;
-
datetime.MINYEAR:返回能表示的最小年份1;
date类
由year年份、month月份及day日期三部分构成:
date(year,month,day)
静态成员(获取时间):
-
date.today():当前日期
-
date.fromtimestamp(stamps):把时间戳转换为日期
-
date.fromordinal(days):把天数(公元1年1月1日为1)转换为date类型;
成员函数:
-
strftime(fmt):格式化输出,格式化参数参见time部分;直接print(t)则输出'2018-11-08';
-
ctime():相当于%c的格式化输出(24字符串)
-
isocalendar():返回(year,month,day)三元组;
-
isoformat():返回‘2018-10-27'样式字符串;
-
isoweekday(): 返回符合ISO标准星期数(周一为1…周日为7) ;
-
weekday(): (周一为0…周日为6);
-
toordinal(): 返回公元公历开始到现在的天数;公元1年1月1日为1;
-
timetuple():返回一个类型为time.struct_time的数组,但有关时间的部分元素值为0;
日期可比较大小,以及加减:
-
两日期差:返回timedelta,(x-y).days返回相差天数;
-
日期+timedelta:返回新的日期;
time类
由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成
time([hour[, minute[, second[, microsecond[, tzinfo]]]]]) #默认time(0,0)
成员函数:
-
strftime(fmt):格式化输出,格式化参数参见time部分;
-
isoformat():返回类'10:21:26.377219'字符串;
datetime类
可以看做是date类和time类的合体,其大部分的方法和属性都继承于这两个类
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
静态成员(获取时间):
-
datetime.now():当前日期时间
-
datetime.combine(date,time):使用日期、时间对象获取datetime对象;
-
datetime.utcnow():当前日期时间的时间元组;
-
datetime.strptime(tstr, fmt):根据参数构造对象;
-
datetime.utcfromtimestamp(stamps):根据时间戳构造对象;
成员函数:
-
date():获取日期部分;
-
time():获取时间部分;
-
utctimetuple():返回时间元组;
timedelta类
用于表示两个datetime对象的差值
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
包含如下属性:
-
days:天数
-
microseconds:微秒数(>=0 并且 <1秒)
-
seconds:秒数(>=0 并且 <1天)
total_seconds():获取总的秒数
Calendar模块
此模块的函数都是日历相关的,星期一是默认的每周第一天,星期天是默认的最后一天。更改设置需调用calendar.setfirstweekday()函数。
函数说明:
-
calendar.calendar(year,w=2,l=1,c=6):返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。
-
calendar.firstweekday( ):返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一。
-
calendar.isleap(year):是闰年返回True,否则为false。
-
calendar.leapdays(y1,y2):返回在Y1,Y2两年之间的闰年总数。
-
calendar.month(year,month,w=2,l=1):返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。
-
calendar.monthcalendar(year,month):返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。
-
calendar.monthrange(year,month):返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。
-
calendar.prcal(year,w=2,l=1,c=6):相当于 print calendar.calendar(year,w,l,c).
-
calendar.prmonth(year,month,w=2,l=1):相当于 print calendar.calendar(year,w,l,c)。
-
calendar.setfirstweekday(weekday):设置每周的起始日期码。0(星期一)到6(星期日)。
-
calendar.timegm(tupletime):和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍(1970纪元后经过的浮点秒数)。
-
calendar.weekday(year,month,day):返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。