博客专栏

EEPW首页 > 博客 > 简述Python培训之time和datetime的区别

简述Python培训之time和datetime的区别

发布人:扣丁学堂 时间:2020-07-07 来源:工程师 发布文章

今天扣丁学堂给大家来详细介绍一下Python中提供了对时间日期的多种多样的处理方式,主要是在time和datetime这两个模块里。今天扣丁学堂小编给为大家整一下Pyrthon视频教程之两个模块在使用上的区别。  

2.png

Python表示时间的两种方式:  

1、时间戳(相对于1970.1.100:00:00以秒计算的偏移量),时间戳是惟一的  

2、时间元组即(struct_time),共有九个元素,分别表示,同一个时间戳的struct_time会因为时区不同而不同。  

struct_time元组共有9个元素,分别含义如下:  

tm_year(年)四位数字,如:2017  

tm_mon(月)1-12  

tm_mday(日)1-31  

tm_hour(时)0-23  

tm_min(分)0-59  

tm_sec(秒)0-61  

tm_wday(weekday)0-6(0表示周日)  

tm_yday(一年中的第几天)1-366  

tm_isdst(是否是夏令时)默认为-1  

time  

在Python文档里,time是归类在GenericOperatingSystemServices中,换句话说,它提供的功能是更加接近于操作系统层面的。通读文档可知,time模块是围绕着UnixTimestamp进行的。  

该模块主要包括一个类struct_time,另外其他几个函数及相关常量。需要注意的是在该模块中的大多数函数是调用了所在平台Clibrary的同名函数,所以要特别注意有些函数是平台相关的(如:time.clock()),可能会在不同的平台有不同的效果。另外一点是,由于是基于UnixTimestamp,所以其所能表述的日期范围被限定在1970-2038之间,如果你写的代码需要处理在前面所述范围之外的日期,那可能需要考虑使用datetime模块更好。  

常用方法:  

1、time.sleep(secs)#推迟指定的时间(secs)后继续运行  

2、time.localtime([secs])#将一个时间戳转换成一个当前时区的struct_time,如果seconds参数未输入,则以当前时间为转换标准、、,未提供secs参数时,按当前时间为准  

3、time.strftime(format[,t])#将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出  

4、time.time()#返回当前时间的时间戳  

5、time.mktime(t)#将一个struct_time转换为时间戳,如下time.localtime接收一个时间戳返回一个struct_time,而time.mktime接收一个struct_time,返回一个时间戳  

6、time.gmtime([secs])#和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time  

7、time.clock()#这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)  

8、time.asctime([t])#把一个表示时间的元组或者struct_time表示为这种形式:'SunJun2023:21:051993'。如果没有参数,将会将time.localtime()作为参数传入  

9、time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))  

10、time.strftime(format[,t])#把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出  

代码实例:  

>>>importtime  

使用time模块,首先得到当前的时间戳  

>>>time.time()  

1513855961.782587  

将时间戳转换为时间元组struct_time  

>>>time.localtime(time.time())  

time.struct_time(tm_year=2017,tm_mon=12,tm_mday=21,tm_hour=19,tm_min=33,tm_sec=17,tm_wday=3,tm_yday=355,tm_isdst=0)  

格式化输出想要的时间  

>>>time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()))  

'2019-12-2119:33:40'  

接上文,不加参数时,默认就是输出当前的时间  

>>>time.strftime('%Y-%m-%d%H:%M:%S')  

'2019-12-2119:33:53'  

使用的时候需要注意一下使用的时区。  

datetime  

datetime比time高级了不少,可以理解为datetime基于time进行了封装,提供了更多实用的函数。在datetime模块中包含了几个类,具体如下:  

timedelta#主要用于计算时间跨度  

tzinfo#时区相关  

time#只关注时间  

date#只关注日期  

datetime#同时有时间和日期  

在实际实用中,用得比较多的是datetime.datetime和datetime.timedelta,另外两个datetime.date和datetime.time实际使用和datetime.datetime并无太大差别。对于一个datetime.datetime实例,主要会有以下属性及常用方法:  

datetime.year  

datetime.month  

datetime.day  

datetime.hour  

datetime.minute  

datetime.second  

datetime.microsecond  

datetime.tzinfo#时区  

datetime.date()#返回date对象  

datetime.time()#返回time对象  

datetime.replace(name=value)#前面所述各项属性是read-only的,需要此方法才可更改  

datetime.timetuple()#返回time.struct_time对象  

dattime.strftime(format)#按照format进行格式化输出  

除了实例本身具有的方法,类本身也提供了很多好用的方法:  

datetime.today()a#当前时间,localtime  

datetime.now([tz])#当前时间默认localtime  

datetime.utcnow()#UTC时间  

datetime.fromtimestamp(timestamp[,tz])#由UnixTimestamp构建对象  

datetime.strptime(date_string,format)#给定时间格式解析字符串  

使用timedelta也算是比较简单的:  

>>>importdatetime  

>>>time_now=datetime.datetime.now()  

>>>time_now  

datetime.datetime(2019,12,21,19,35,59,129648)  

>>>time_now.strftime('%Y-%m-%d%H:%M:%S')  

'2019-12-2119:35:59'  

>>>delta=datetime.timedelta(hours=24)  

>>>print(time_now+delta)  

2019-12-2219:35:59.129648  

>>>print(time_now-delta)  

2016-10-2620:46:16.657523  

>>>print(time_now-delta)  

2019-12-2019:35:59.129648  


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



关键词:

相关推荐

技术专区

关闭