时间类型是编程语言中经常使用到的,且在日常生活中也常用到。本文将介绍几种时间库的常用方法,以满足日常编程的需要,主要涉及的库有:time、datetime中的time类型。
1、time库
time库是python的内置库,无需安装,在使用的时候直接import time即可,主要方法有: (1)获取时间戳
代码语言:javascript复制import time
print('获取时间戳:n', time.time())
#指定日期获取时间戳,使用的方法后面会见到
times = time.strptime('2021/01/23', '%Y/%m/%d') #将指定时间转成struct_time类型
print('指定日期转换成时间戳:n', time.mktime(times)) #使用mktime获取时间戳,传入struct_time类型
代码语言:javascript复制获取时间戳:
1611379248.227833
指定日期转换成时间戳:
1611331200.0
(2)localtime()方法
localtime()方法可以将时间戳转换为当前时区的struct_time类型,如果不提供参数,以当前时间为准;如果提供则按照提供的为准。
代码语言:javascript复制print('当前时区的struct_time类型:n', time.localtime())
print('指定时区的struct_time类型:n', time.localtime(time.time()))
代码语言:javascript复制当前时区的struct_time类型:
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=23, tm_hour=13, tm_min=40, tm_sec=1, tm_wday=5, tm_yday=23, tm_isdst=0)
指定时区的struct_time类型:
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=23, tm_hour=13, tm_min=40, tm_sec=1, tm_wday=5, tm_yday=23, tm_isdst=0)
(3)时间类型转换成字符串
利用了strftime(format, [t])方法,通过指定输出格式和(2)中的struct_time类型,可以返回一个指定格式的字符串时间。
代码语言:javascript复制print('格式化输出当前时间:n', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
代码语言:javascript复制格式化输出当前时间:
2021-01-23 13:45:37
time库的常用格式化字符表
格式化符 | 描述 |
---|---|
%a | 星期的简写,星期一为Mon |
%A | 星期的全写,星期一为Monday |
%b | 月份的简写,四月为Apr |
%B | 月份的全写,四月为April |
%c | 日期时间的字符串表示,Sat Jan 23 13:52:08 2021 |
%d | 某一日是在这个月的第几天 |
%f | 微秒,范围[0, 999999] |
%H | 24小时制 |
%I | 12小时制 |
%j | 某一日是在这一年的第几天 |
%m | 月份 |
%M | 分钟 |
%p | AM或者PM |
%S | 秒 |
%U | 某一周是这一年的第几周,周日作为周的第一天 |
%w | 今天在这周的天数 |
%W | 某一周是这一年的第几周,周一作为周的第一天 |
%x | 日期字符串,01/23/2 |
%X | 时间字符串,14:00:57 |
%y | 两个数字表示的年份 |
%Y | 四个数字表示的年份 |
(4)字符串转化成时间格式
与(3)操作相反,字符串转换成时间格式用到了time.strptime(日期,格式)方法。
代码语言:javascript复制times = time.strptime('2021/01/23', '%Y/%m/%d')
print('字符串转strut_time对象:n', times)
代码语言:javascript复制字符串转strut_time对象:
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=23, tm_isdst=-1
(5)线程休眠
线程休眠用到了time.sleep(秒数),表示程序暂停多少秒后继续运行,在网络爬虫中很常见。
2、datetime库
datetime库是专门用来处理时间的库,常用的有3个类:
datetime.date:年月日构成的日期对象
datetime.datetime:既包含日期,又包含时间
datetime.timedelta:时间间隔对象,计算时间
2.1 datetime.date类
(1)创建date对象
创建date对象有两个方法:(1)创建今天的date使用datetime.date.today()方法;(2)创建指定日期,datetime.date(年,月,日)。
代码语言:javascript复制from datetime import date
print('创建今天的date对象:n', date.today())
print('创建指定日期的date对象:n', date(2020, 1, 23))
代码语言:javascript复制创建今天的date对象:
2021-01-23
创建指定日期的date对象:
2020-01-23
(2)date对象转字符串
date转字符串利用date对象的strftime(format)方法,格式说明符同time库一致;
代码语言:javascript复制date1 = date(2020, 1, 23)
print('格式化输出时间:n', date1.strftime('%Y-%m-%d'))
代码语言:javascript复制格式化输出时间:
2020-01-23
(3)转成struct_time格式
使用date对象的timetuple()方法,可以传给time.mktime()方法,实现两者的连接。
代码语言:javascript复制date1 = date(2020, 1, 23)
print('转成struct_time格式:n', date1.timetuple())
代码语言:javascript复制转成struct_time格式:
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=23, tm_isdst=-1)
(5)将时间戳转成date对象
此操作与(3)互逆,可以实现从time库到datetime库的转换。
代码语言:javascript复制time1 = time.time()
print('时间戳转成date对象:n', date.fromtimestamp(time1))
代码语言:javascript复制时间戳转成date对象:
2021-01-23
(6)date的三种属性
年、月、日是date重要的属性,方法有括号,属性没有括号;获取年月日分别对应year,month,day。
代码语言:javascript复制date1 = date(2020, 1, 23)
print('年份:n', date1.year)
-----结果-----
年份:
23
(7)替换date对象中的年、月、日
替换date对象的年、月、日用到了date1.replace(year, month, day)方法,如果不填入相应参数,表示对应项不替换。
代码语言:javascript复制date1 = date(2020, 1, 23)
print('替换年、月份:n', date1.replace(2013, 8))
-----结果-----
替换年、月份:
2013-08-23
2.2 datetime类
(1)创建datetime对象
创建datetime对象与date一样,有两个方法:获取当前的datetime对象,利用datetime.now()方法;获取指定时间的datetime对象,利用datetime(年,月,日,时,分,秒)方法。
代码语言:javascript复制from datetime import datetime
print('获取现在的datetime对象:n', datetime.now())
print('获取指定时间的datetime对象:n', datetime(2000, 1, 12, 12, 11, 35))
代码语言:javascript复制获取现在的datetime对象:
2021-01-23 19:28:52.769342
获取指定时间的datetime对象:
2000-01-12 12:11:35
特别的,可以通过datetime对象直接创建date对象,利用datetime.date()直接创建,这是很重要的特性。
代码语言:javascript复制print('根据datetime对象创建date对象:n', datetime.now().date())
-----结果-----
根据datetime对象创建date对象:
2021-01-23
(2)datetime对象与字符串的互相转化
datetime对象与字符串的互相转化又是datetime的一个重要特性。
代码语言:javascript复制datetime1 = datetime.now()
time_str1 = '2000/03/06 12:35:46'
print('datetime对象转字符串:n', datetime.strftime(datetime1, '%Y-%m-%d %H:%M:%S'))
print('datetime对象转字符串:n', datetime.strftime(datetime1, '%Y-%m-%d')) #注意,此时仍属于datetime对象而不是date对象
print('字符串转datetime对象:n', datetime.strptime(time_str1, '%Y/%m/%d %H:%M:%S'))
根据(1)可知,字符串转date对象,可以先转为datetime,再转为date。
注意:datetime类型可以转为date,而date不可转为datetime。
(3)datetime转struct_time对象
与date类转struct_time对象一样,用到了timetuple()方法,不再赘述。
(4)时间戳与datetime对象的互转
时间戳转datetime对象,运用datetime.fromtimestamp()方法;datetime转时间戳,先把datetime转struct_time对象,再利用time.mktime()方法转换,与date类中相似。
代码语言:javascript复制time1 = time.time()
print('时间戳转datetime对象:n', datetime.fromtimestamp(time1))
-----结果-----
时间戳转datetime对象:
2021-01-23 19:51:57.837723
(5)datetime的几个属性与替换
与date类类似,datetime增加了hour、minute、second属性,同样通过replace对datetime进行替换,使用方法与date一样。
2.3 timedelta类
timedelta类是一个重要的类,可以对日期进行计算。
语法:datetime1 timedelta(weeks, days, hours, minutes, seconds, milliseconds, microseconds),进行加减操作。
代码语言:javascript复制from datetime import timedelta
now = datetime.now()
new_day = now timedelta(days = -50)
print('50天前:n', new_day)
-----结果-----
50天前:
2020-12-04 20:10:50.746098
代码语言:javascript复制获取从今天往后500天的年月日的字符串
date_ls = [(now timedelta(days=i)).date().strftime('%Y-%m-%d') for i in range(500)]
print(date_ls)
-----结果-----
['2021-01-23',
'2021-01-24',
'2021-01-25',
'2021-01-26',
'2021-01-27',...
以上就是python中time类型的主要内容,掌握各种日期的转换方法对于理解time类型十分重要,因为很多数据都是关于时间序列的。