time模块详解

一、 引入

在Python中,通常有这几种方式来表示时间:
时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行type(time.time()),返回的是float类型。
格式化的时间字符串(Format String)
结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

1.time模块

  1. 时间戳
# 1、时间戳:从1970年到现在经过的秒数
#    作用:用于时间间隔的计算

print(time.time()) # 1598092356.7834184


  1. 按照某种格式显示的时间(格式化的字符串形式的时间):2020-03-30 11:11:11
#   作用:用于展示时间

#struct_time---->格式化的字符串形式的时间
print(time.strftime('%Y-%m-%d %H:%M:%S %p',time.localtime()))) # 2020-08-22 18:32:55 PM  
参数为struct_time类型,不传默认为 time.localtime()
print(time.strftime('%Y-%m-%d %X')) # 2020-08-22 18:33:23 (字符串格式)

# 格式化的字符串形式的时间->struct_time
print(time.strptime('2020-10-18','%Y-%m-%d'))  #( striing---> struct_time format)得到的是结构化时间,
得到的结果和time.localtime()的格式一致


  1. 结构化的时间
# 作用:用于单独获取时间的某一部分

# timestemp---->结构化的时间
res=time.localtime() # 结果为为元组(aaa,bbbb)不传默认为time.time()
print(res)   # time.struct_time(tm_year=2020, tm_mon=8, tm_mday=22, tm_hour=18,
                    # tm_min=34, tm_sec=2, tm_wday=5, tm_yday=235, tm_isdst=0)
print(res.tm_year) # 2020
print(res.tm_yday) # 235

# 本地时区和UTC时区   
print(time.localtime())   #本地时区的struct_time
# time.struct_time(tm_year=2021, tm_mon=2, tm_mday=15, tm_hour=18, tm_min=7, tm_sec=25, tm_wday=0, tm_yday=46, tm_isdst=0)
print(time.gmtime(333333424.432434,))    #UTC时区的struct_time
# time.struct_time(tm_year=2021, tm_mon=2, tm_mday=15, tm_hour=10, tm_min=7, tm_sec=37, tm_wday=0, tm_yday=46, tm_isdst=0)

相差8小时

三种时间图如下,可以通过结构化时间互相转换

time模块详解_第1张图片

 1 #--------------------------按图1转换时间
 2 # localtime([secs])
 3 # 将一个时间戳转换为当前时区的struct_time,secs参数未提供,则以当前时间为准。
 4 time.localtime()
 5 time.localtime(1473525444.037215)
 6 
 7 # gmtime([secs])localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
 8 
 9 # mktime(t) : 将一个struct_time转化为时间戳。
10 print(time.mktime(time.localtime()))#1473525749.0
11 
12 
13 # strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和 time.gmtime()返回)转化
 为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个
15 # 元素越界,ValueError的错误将会被抛出。
16 print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56
17 
18 # time.strptime(string[, format])
19 # 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
20 print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))
21 #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
22 #  tm_wday=3, tm_yday=125, tm_isdst=-1)

time模块详解_第2张图片

  1. asctime([t])
1 #--------------------------按图2转换时间
2 # asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'3 # 如果没有参数,将会将time.localtime()作为参数传入。
4 print(time.asctime())#Sun Sep 11 00:43:43 2016
  1. ctime([secs])
6 # ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为 None的时候,
将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))8 print(time.ctime())  # Sun Sep 11 00:46:38 2016
9 print(time.ctime(time.time()))  # Sun Sep 11 00:46:38 2016



1 #--------------------------其他用法
2 # sleep(secs)
3 # 线程推迟指定的时间运行,单位为秒。

时间加减


import datetime

# print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
# print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
# print(datetime.datetime.now() )
# print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
# print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
# print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
# print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分


#时间替换
# c_time  = datetime.datetime.now()
# print(c_time.replace(minute=3,hour=2)) #时间替换

二、datetime模块

1.格式化输出时间,datetime时间转字符串

import datetime 

print(datetime.datetime.now()) # 2021-02-15 18:54:42.107243, type为<class 'datetime.datetime'>
# des: 可以修改里面的间隔符号,如 %Y/%m/%d %H:%M:%S 等,格式化输出后type为 'str'类型
    result = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# 输出结果:  2019-04-04 08:00:00
 
tmp = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S').split('-')
result1 = '{}年{}月{}日 {}时{}分{}秒'.format(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5])
# 输出结果:20210215185215

2.字符串str转datetime.datetime

import datetime
# des: 最后输出type为  'datetime.datetime'
str_time = '2019-04-04 08:00:00'
result = datetime.datetime.strptime(str_time, '%Y-%m-%d %H:%M:%S')
# 输出结果: 2019-04-04 08:00:00
 
str_time1 = '2019年04月04日 08时00分00秒'
result1 = datetime.datetime.strptime(str_time1, '%Y年%m月%d日 %H时%M分%S秒')
# 输出结果: 2019-04-04 08:00:00

3.计算段时间差

import datetime
 
start_time = '2019-04-04 08:00:00'
end_time = '2019-04-06 09:00:00'
 
# 1、字符串转 'datetime.datetime'
start_time = datetime.datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S')
end_time = datetime.datetime.strptime(end_time, '%Y-%m-%d %H:%M:%S')
# 2、做运算
print(end_time-start_time)
# type为 'datetime.timedelta', 输出结果: 2 days, 1:00:00
print((end_time-start_time).seconds)
# type为 'int', 只输出时间秒数差,不输出天数差  输出结果: 3600
print((end_time-start_time).microseconds)
# type为 'int', 只输出时间微妙差,不输出天数差  输出结果: 0
print((end_time-start_time).days)
# type为 'int', 只输出天数差,不输出时间差  输出结果: 2
按照当前时间 +或者-  任意天数后的日期
import datetime
 
# 获取当前日期时间  2019-04-04 08:00:00
now_date = datetime.datetime.now()
# 获取当前日期  2019-04-04
# now_date = datetime.date.today()
 
tomorrow_date = now_date + datetime.timedelta(days=1)
# 输出结果: 2019-04-05 08:00:00
yesterday_date = now_date + datetime.timedelta(days=-1)

在python中经常会用到计算两个时间差,两个日期类型进行相减可以获取到时间差。经常会使用seconds来获取,其实seconds获取的是仅仅是时间差的秒数,忽略微秒数,忽略天数。total_seconds()才是获取两个时间之间的总差。

timedalte 是datetime中的一个对象,该对象表示两个时间的差值。构造函数:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)其中参数都是可选,默认值为0,其中:

1 minute=1000 millisecond(毫秒)
1 millisecond = 1000 microseconds(微秒)
1 minute = 60 seconds
1 hour = 3600 seconds
1 week = 7 days

在构造函数中,注意参数值的范围:

0 <= microseconds < 1000000
0 <= seconds < 3600*24 (the number of seconds in one day)
-999999999 <= days <= 999999999


timedalte 有三个只读属性:
timedelta.min:负数最大时间差,相当于  timedelta(-999999999)。
timedelta.max:正数最大时间差,相当于  timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)。
timedelta.resolution:两个时间的最小差值 相当于   timedelta(microseconds=1)。
 用法:
data_els = []
today_ele =datetime.now().date()
data_els.append(['今天', datetime.now().date()])
data_els.append(['昨天', today_ele - timedelta(days=1)])
data_els.append(['近7天', today_ele - timedelta(days=7)])
data_els.append(['近30天', today_ele - timedelta(days=7)])
selected = " "
for item in data_els:
    option_ele = """s" %s>%s """ % (item[1], selected, item[0])
    select_ele += option_ele
 

你可能感兴趣的:(Python模块与包,字符串,python,人工智能,列表,子模块)