第九章-时间
time 类:time是一个时间类,由时、分、秒、微妙组成。
各参数的取值范围:
hour的范围为[0, 24)
minute的范围为[0, 60)
second的范围为[0, 60)
microsecond的范围为[0, 1000000)
import datetime
maxTime=datetime.time.max #获取time能表示的最大时间
maxTime
datetime.time(23, 59, 59, 999999)print(maxTime)
23:59:59.999999minTime=datetime.time.min #获取time能表示的最小时间
minTime
datetime.time(0, 0)print(minTime)
00:00:00
time 类–hour 、 minute、 second、microsecond
from datetime import *
tm=datetime.now() #获取当前的时间
tm
datetime.datetime(2018, 10, 7, 19, 18, 17, 515877)print™
2018-10-07 19:18:17.515877tm.hour #获取时
19print(tm.hour)
19tm.minute #获取分
18print(tm.minute)
18tm.second #获取秒
17print(tm.second)
17tm.microsecond #获取毫秒
515877print(tm.microsecond)
515877
1)time.replace函数:用给定的参数时、分、秒、微秒代替原有对象中的属性,创建一个新的时间对象,但原有对象仍保持不变。
from datetime import *
tm=datetime.now()
print™
2018-10-07 19:23:25.966603tm1=tm.replace(hour=10,minute=10) #只替换指定的属性
tm1
datetime.datetime(2018, 10, 7, 10, 10, 25, 966603)print(tm1)
2018-10-07 10:10:25.966603print™ #原有对象仍保持不变
2018-10-07 19:23:25.966603
2)time.isoformat函数:返回时间格式如:HH:MM:SS的时间字符串表示。
from datetime import *
tm=time(23,46,10)
print™
23:46:10tm1 = tm.isoformat()
print(tm1)
23:46:10tm=time(24,2,2) #超过指定的区间
Traceback (most recent call last):
File “”, line 1, in
ValueError: hour must be in 0…23tm=(12,10,33)
print(tm.isoformat())
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘tuple’ object has no attribute ‘isoformat’
3)time.strftime函数:返回自定义格式时间字符串。
from datetime import *
tm=time(12,46,10)
print™
12:46:10tm1=tm.strftime("%H-%M-%S") #自定义格式时间字符串
print(tm1)
12-46-10tm2=tm.strftime("%H/%M/%S") #自定义格式时间字符串
print(tm2)
12/46/10
Datetime类
datetime类是date和time的结合体,包括date与time的所有信息,date和time类中具有的方法和属性,datetime类都具有。所以在我们日常的工作中,可以仅使用datetime类。
该类的构造函数:
datetime.datetime(year, month, day[, hour[, minute[, second[,microsecond[,tzinfo]]]]])
各参数的含义与date、 time构造函数中的一样,但是要注意各参数的取值范围。
1)Datetime类—today和now函数
from datetime import *
print(datetime.today())
2018-10-07 19:39:26.013935print(datetime.now())
2018-10-07 19:39:38.901891tm=datetime.now()
print™
2018-10-07 19:40:04.628730print(tm.year)
2018print(tm.month)
10print(tm.day)
7print(tm.hour)
19print(tm.minute)
40print(tm.second)
4print(tm.microsecond)
628730
2)Datetime类—fromtimestamp函数
datetime.fromtimestamp(timestamp [, tz])根据时间戳创建一个datetime对象,参数tz指定时区信息,不传默认为
本地时区。
from datetime import *
import time
t=time.time() #获取当前时间戳
print(t)
1538912581.8924637datetimes=datetime.fromtimestamp(t) #将时间戳转化为一个datetime对象
print(datetimes)
2018-10-07 19:43:01.892464print(type(datetimes))
<class ‘datetime.datetime’>print(str(datetimes))
2018-10-07 19:43:01.892464
3)Datetime类—datetime.strptime函数
datetime.strptime函数:将格式时间字符串转换为datetime对象。
import datetime
print (datetime.datetime.strptime(“2015-08-27 17:23:05”,"%Y-%m-%d %H:%M:%S"))
2015-08-27 17:23:05
Datetime类—year、 month、 day、 hour、 minute、 second属性
import datetime
t=datetime.datetime.now()
print(t)
2018-10-07 19:50:58.413364print(t.year) #获取当前年份
2018print(t.month) #获取当前月份
10print(t.day) #获取当前日期
7print(t.hour) #获取当前小时
19print(t.minute) #获取当前分钟
50print(t.second) #获取当前秒
58print(t.microsecond) #获取当前毫秒
413364
4)Datetime类—datetime.date() 函数
datetime.date() 函数:获取时间中的日期对象date。
import datetime
tm=datetime.datetime.today()
print™
2018-10-07 19:55:53.034470dates=datetime.datetime.date™ #获取时间中的日期对象date
print(dates)
2018-10-07print(dates.year)
2018print(dates.month)
10print(dates.day)
7print(dates.hour) #属性不存在报错
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘datetime.date’ object has no attribute ‘hour’
5)Datetime类—datetime.time()函数
datetime.time()函数:获取时间中的日期对象time。
import datetime
tm=datetime.datetime.today()
print™
2018-10-07 19:59:11.945046times=datetime.datetime.time™
print(times)
19:59:11.945046print(times.year)
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘datetime.time’ object has no attribute ‘year’print(times.hour)
19print(times.minute)
59print(times.second)
11print(times.microsecond)
945046print(type(times))
<class ‘datetime.time’>
6)Datetime类—datetime.combine函数
datetime.combine函数:根据date和time,创建一个datetime对象。
参数
date:是datetime.date类型
time:是datetime.time类型
import datetime
print(datetime.datetime.combine(datetime.datetime.today(),datetime.time(17,12,35)))
2018-10-07 17:12:35
7)Datetime类—datetime.replace()函数
datetime.replace()函数:替换指定的属性
构造函数:
datetime.replace([year[, month[, day[, hour[, minute[,second[, microsecond[, tzinfo]]]]]]]])
import datetime
times=datetime.datetime.now()
times
datetime.datetime(2018, 10, 7, 20, 4, 35, 870489)print(times)
2018-10-07 20:04:35.870489t2=times.replace(year=2017,minute=10)
print(t2)
2017-10-07 20:10:35.870489t3=times.replace(hour=25)
Traceback (most recent call last):
File “”, line 1, in
ValueError: hour must be in 0…23
8)Datetime类—mktime函数
mktime函数:将datetime对象转换成时间戳
import datetime
import time
t=datetime.datetime.now() #获取当前时间的datetime对象
print(t)
2018-10-07 20:07:31.532865struct_time=t.timetuple() #根据当前时间的datetime对象获取当前时间的时间元组
print(struct_time)
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=7, tm_hour=20, tm_min=7, tm_sec=31, tm_wday=6, tm_yday=280, tm_isdst=-1)timestamp=time.mktime(struct_time) #根据当前时间的时间元组获得当前时间的时间戳
print(timestamp)
1538914051.0timestamp=int(timestamp)
print(timestamp)
1538914051
9)Datetime类—datetime.weekday(time)函数
datetime.weekday(time)函数:参数time是一个datetime.date类型的数据。返回weekday中的星期几,星期一,返回0;星期二,返回1;以此类推。
import datetime
now=datetime.date.today()
print(now)
2018-10-07print(datetime.date.weekday(now))
6
10)Datetime类—datetime.isocalendar(time)函数
datetime.isocalendar(time)函数:参数time是一个datetime.date类型数据
import datetime
now=datetime.datetime.now()
now
datetime.datetime(2018, 10, 7, 20, 13, 10, 898024)print(now)
2018-10-07 20:13:10.898024print(datetime.datetime.isocalendar(now)) #以元组的形式返回年月日
(2018, 40, 7)
11)Datetime类—datetime.strftime(format)函数
datetime.strftime(format)函数:返回自定义的格式时间字符串。参数format是自定义的时间格式。
import datetime
now=datetime.datetime.now()
print(now)
2018-10-07 20:15:32.571835print(now.strftime(’%Y-%m-%d %H:%M:%S’)) #获取当前时间的格式化时间字符串
2018-10-07 20:15:32print(now.strftime(’%y-%m-%d %I:%M:%S %p’)) #获取当前时间的格式化时间字符串
18-10-07 08:15:32 PMprint (now.strftime(’%A’)) #星期的全写
Sundayprint (now.strftime(’%a’)) #星期的简写
Sunprint (now.strftime(’%b’)) #月份的简写
Octprint (now.strftime(’%B’)) #月份的全写
Octoberprint (now.strftime(’%c’)) #得到日期时间的字符串
Sun Oct 7 20:15:32 2018print (now.strftime(’%x’)) #日期字符串
10/07/18print (now.strftime(’%X’)) #时间字符串
20:15:32print (now.strftime(’%w’)) #今天在这周是星期几,从周日为开始算一周
0print (now.strftime(’%j’)) #今天是今年的第几天
280print (now.strftime(’%U’)) #这周是今年的第几周
40
Timedelta类
datetime.timedelta对象代表两个时间之间的时间差,两个date或datetime对象相减就可以返回一个timedelta对象。
构造函数:
class datetime.timedelta([days[, seconds[, microseconds[,milliseconds[, minutes[, hours[, weeks]]]]]]])
可以通过dir(datetime.timedelta)查看属性和方法。针对时间存储, timedelta内部只能存储days, seconds,microseconds,其他参数的值会自动按如下规则进行转换:
1 millisecond(毫秒)转换成 1000 microseconds(微秒)
1 minute 转换成 60 seconds
1 hour 转换成 3600 seconds
1 week转换成 7 days
import datetime
dir(datetime.timedelta)
[‘abs’, ‘add’, ‘bool’, ‘class’, ‘delattr’, ‘dir’, ‘divmod’, ‘doc’, ‘eq’, ‘floordiv’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’, ‘hash’, ‘init’, ‘init_subclass’, ‘le’, ‘lt’, ‘mod’, ‘mul’, ‘ne’, ‘neg’, ‘new’, ‘pos’, ‘radd’, ‘rdivmod’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘rfloordiv’, ‘rmod’, ‘rmul’, ‘rsub’, ‘rtruediv’, ‘setattr’, ‘sizeof’, ‘str’, ‘sub’, ‘subclasshook’, ‘truediv’, ‘days’, ‘max’, ‘microseconds’, ‘min’, ‘resolution’, ‘seconds’, ‘total_seconds’]datetime.timedelta(hours=1).seconds #小时转秒
3600datetime.timedelta(minutes=10).seconds #分钟转秒
600datetime.timedelta(days=1).seconds
0datetime.timedelta(hours=2,seconds=30).seconds
7230datetime.timedelta(seconds=30).microseconds
0
1)Timedelta类–两日期的时间相减
import datetime
d1= (datetime.datetime.now())
print(d1)
2018-10-07 20:30:26.629777d1.year
2018d2=d1.replace(year=2017,minute=10)
print(d2)
2017-10-07 20:10:26.629777print((d2-d1).days) #两个时间相减时,就会返回一个datetime.timedelta时间对象,代表两个时间之间的时间差
-366print((d1-d2).days)
365print((d2-d1).minutes)
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘datetime.timedelta’ object has no attribute ‘minutes’print((d1-d2).minute)
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘datetime.timedelta’ object has no attribute ‘minute’print((d1-d2).seconds)
1200
2)Timedelta类–日期或时间加上或减去一个时间间隔
日期加上或减去一个时间间隔,是通过加减timedelta对象中的属性值给定值实现的。
import datetime
now = datetime.datetime.now() #获取当前的时间
print(now)
2018-10-07 20:37:40.392688delta = datetime.timedelta(days = 1) #设定一个时间间隔,间隔为一天,当前时间加一天
newTime = now + delta #新时间
print (newTime)
2018-10-08 20:37:40.392688print (str(newTime)[:-7]) #新时间去掉毫秒
2018-10-08 20:37:40print (newTime.strftime(’%Y-%m-%d %H:%M:%S’)) #或者使用格式化函数
2018-10-08 20:37:40delta = datetime.timedelta(days = -1) #当前时间减1天
newTime = now + delta
print (newTime)
2018-10-06 20:37:40.392688
from datetime import datetime
from datetime import timedelta
now = datetime.now()
delta = timedelta(days = -100) #设置100天前的时间间隔
oldTime = now + delta
print (oldTime.strftime("%Y-%m-%d")) #得到100天前的时间
2018-06-29
import datetime
datetime.datetime.today()
datetime.datetime(2018, 10, 7, 20, 46, 8, 16331)print (datetime.datetime.today() + datetime.timedelta(days=-100))
2018-06-29 20:44:19.452650datetime.date.today()
datetime.date(2018, 10, 7)print (datetime.date.today() + datetime.timedelta(days=-100))
2018-06-29
import datetime
threeHoursAgo = datetime.datetime.now() -datetime.timedelta(hours = 3)
print (str(threeHoursAgo))
2018-10-07 17:47:05.861411print (str(threeHoursAgo)[:-7])
2018-10-07 17:47:05
3)timedelta.total_seconds()函数
total_seconds()函数:该方法用于获取总共的秒数。
import datetime
seconds=datetime.timedelta(hours=1,seconds=30).total_seconds()
print(seconds)
3630.0