Bootstrap

python中time 和datetime模块

一、time模块

使用前先导入time模块:import time

  1. time.time() 
    表示当前时间的时间戳
    import time
    
     print(time.time())
    >> 1668412187.3410442
  2. time.localtime() 
    将时间戳转化为当前时区的struct_time,可以通过索引或者成员符号取相关值
    local_time = time.localtime(time.time())
    print('转化时间戳为本地时间:{}'.format(local_time))
    print('年份为:{}'.format(local_time[0]))
    print('月份为:{}'.format(local_time.tm_mon))
    print('当前的本地时间:{}'.format(time.localtime()))  # 不加时间戳参数则打印当前时间
    
    >> 转化时间戳为本地时间:time.struct_time(tm_year=2022, tm_mon=11, tm_mday=14, tm_hour=15, tm_min=49, tm_sec=47, tm_wday=0, tm_yday=318, tm_isdst=0)
    >> 年份为:2022
    >> 月份为:11
    >> 当前的本地时间:time.struct_time(tm_year=2022, tm_mon=11, tm_mday=14, tm_hour=15, tm_min=49, tm_sec=47, tm_wday=0, tm_yday=318, tm_isdst=0)
  3. time.gmtime()
    将时间戳转换为UTC时区的struct_time
    print('转化时间戳为utc时间:{}'.format(time.gmtime(time.time())))
    print('当前的utc时间:{}'.format(time.gmtime())) # 不加时间戳参数则打印当前utc时间
    
    >> 转化时间戳为utc时间:time.struct_time(tm_year=2022, tm_mon=11, tm_mday=14, tm_hour=7, tm_min=49, tm_sec=47, tm_wday=0, tm_yday=318, tm_isdst=0)
    >> 当前的utc时间:time.struct_time(tm_year=2022, tm_mon=11, tm_mday=14, tm_hour=7, tm_min=49, tm_sec=47, tm_wday=0, tm_yday=318, tm_isdst=0)
  4. time.mktime() 
    将struct_time转换成时间戳
    print(time.mktime(local_time))
    
    >> 1668412187.0
  5. time.sleep() 
    线程睡眠指定时间,单位为秒
    time.sleep(5) 
  6. time.asctime() 
    表示时间的元组或者将struct_time表示为 Mon Nov 14 11:38:57 2022 这种形式
    print(time.asctime())
    print(time.asctime(time.localtime(time.time())))
    
    >> Mon Nov 14 15:49:47 2022
    >> Mon Nov 14 15:49:47 2022
  7. time.ctime() 
    表示时间的元组或者将时间戳转化为 Mon Nov 14 11:38:57 2022 这种形式
    print(time.ctime())
    print(time.ctime(time.time()))
    
    >> Mon Nov 14 15:49:47 2022
    >> Mon Nov 14 15:49:47 2022
  8. time.strftime( format [, t] ) 
    代表时间的元组或者struct_time转化为格式化的时间字符串,格式由参数format决定
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
    print(time.strftime('%Y-%m-%d %H:%M:%S'))
    
    >> 2022-11-14 15:49:47
    >> 2022-11-14 15:49:47

其中format为时间字符串的格式化样式,t为struct_time形式的参数,format格式如下:

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00-59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身

二、datetime模块

datetime模块中常用的类是:

datetime.date:表示日期的类,主要用于处理年、月、日;

datetime.time:表示时间的类,主要用于处理时、分、秒;

datetime.datetime:表示日期时间的类,date类和time类的综合使用,可以处理年、月、日、时、分、秒;

datetime.timedelta:表示日期时间的类,date类和time类的综合使用,可以处理年、月、日、时、分、秒;

1. datetime.date类

1)date()

     date()是date类的构造函数。构造函数有三个参数:年、月和日,返回格式为year-month-day

print(datetime.date(2022, 11, 14))

>> 2022-11-14

2) today()

使用今天的日期构造对象,无参数,返回今天的日期;还可以打印对象对应的年、月、日属性

d = datetime.date.today()
print(d)
print("当前年:{}".format(d.year))
print("当前月:{}".format(d.month))
print("当前日:{}".format(d.day))

>> 2022-11-14
>> 当前年:2022
>> 当前月:11
>> 当前日:14

3) fromtimestamp(t)

使用时间戳创建日期对象,传入时间戳参数,返回时间戳对应的日期

print(datetime.date.fromtimestamp(1668416624.0285492))

>> 2022-11-14

2. datetime.time类

1)、静态方法和属性

time.min:time类所能表示的最小时间

time.max:time类所能表示的最大时间

time.resolution:time类表示时间的最小单位 1微秒

print(datetime.time.min)
print(datetime.time.max)
print(datetime.time.resolution)

>> 00:00:00
>> 23:59:59.999999
>> 0:00:00.000001

2)其他常用方法和属性:通过time对象才能调用

# 先构造一个time对象
t = datetime.time(17, 35, 11)
print(t)
# 分别打印t.hour、t.minute、t.second、t.microsecond:时、分、秒、微秒 属性
print(t.hour)
print(t.minute)
print(t.second)
print(t.microsecond)

>> 17:35:11
>> 17
>> 35       
>> 11
>> 0
# 没有传递微秒参数。因此,将打印其默认值0


# 方法
# t.replace(hour=,minute=,second=,microsecond=), 生成一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性。(原有对象仍保持不变)
print(t.replace(hour=18))
>> 18:35:11

# t.isoformat() 返回型如"HH:MM:SS"格式的字符串时间表示
print(t.isoformat())
>> 17:35:11

# t.strftime(format):传入任意格式符,可以输出任意格式的时间表示形式
print(t.strftime('%H-%M-%M'))
>> 17-35-35

3. datetime.datetime

1) datetime 对象

datetime模块有一个名为的dateclass类,可以包含来自datetime对象的信息

datetime()构造函数中的前三个参数year、month和day是必需的

import datetime

# datetime(year, month, day)
print(datetime.datetime(2022, 11, 14))

# datetime(year, month, day, hour, minute, second, microsecond)
t = datetime.datetime(2022, 11, 14, 23, 55, 59, 342380)
print(t)

>> 2022-11-14 00:00:00
>> 2022-11-14 23:55:59.342380

# 打印属性
print(t.year)
print(t.month)
print(t.day)
print(t.hour)
print(t.minute)
print(t.microsecond)
print(t.timestamp())  # 打印时间戳

>> 2022
>> 11
>> 14
>> 23
>> 55
>> 342380
>> 1668441359.34238

2) datetime.now()

# 获取当前的日期,年月份
print(datetime.datetime.now().date())
>> 2022-11-14

# 获取每个时间的序列
print(datetime.datetime.now().timetuple())
>> time.struct_time(tm_year=2022, tm_mon=11, tm_mday=14, tm_hour=18, tm_min=2, tm_sec=20, tm_wday=0, tm_yday=318, tm_isdst=-1)

# 获取月份(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)
print(datetime.datetime.now().timetuple().tm_mon)
>> 11

# 时间类型转为字符串类型
print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
>> 2022-11-14 18:19:20

# 在我们现在的日期里面加入2天,最后打印出来,这里要注意,模块的使用,有优先级的混淆
print(datetime.datetime.now().date() + datetime.timedelta(days=2))
>> 2022-11-16

# 在现在的时间里面向后推迟2个小时
print(datetime.datetime.now()+datetime.timedelta(hours=2))
>> 2022-11-14 20:02:20.085866

4. datetime.timedelta

timedelta对象表示两个日期或时间之间的时差

# 创建了两个timedelta对象t1和t2,打印相差的时间
t1 = datetime.timedelta(weeks=2, days=5, hours=1, seconds=33)
t2 = datetime.timedelta(days=4, hours=11, minutes=4, seconds=54)
t3 = t1 - t2
print(t3)
>> 14 days, 13:55:39

t1 = datetime.timedelta(seconds = 33)
t2 = datetime.timedelta(seconds = 54)
t3 = t1 - t2
print("t3 =", t3)
>> t3 = -1 day, 23:59:39

# 使用total_seconds()方法获得timedelta对象中的总秒数
t = datetime.timedelta(days=5, hours=1, seconds=33, microseconds=233423)
print("total seconds =", t.total_seconds())
>> total seconds = 435633.233423

# 求出上一个月的最后一天日期,就用这个月的第一天减1天,这个里面的参数可以改动,默认为月份初始化天
f=datetime.date(day=1, month=datetime.date.today().month, year=datetime.date.today().year) - datetime.timedelta(days=1)
print(f)
>> 2022-10-31

5. python 格式日期时间

1)strftime()-字符串的日期时间对象

strftime()方法是在date、datetime和time类下面定义的。该方法根据给定的日期、日期时间或时间对象创建格式化的字符串。

print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
print(datetime.date.today().strftime("%b %d %Y"))
print(datetime.time(18, 48, 32).strftime('%H-%M-%S'))

>> 2022-11-14 18:51:41
>> Nov 14 2022
>> 18-48-32

2) strptime()-将字符串类型转为时间类型

date_string = "14 Nov, 2022"
date_object = datetime.datetime.strptime(date_string, "%d %b, %Y")
print(date_object)
print(type(date_object))

>> 2022-11-14 00:00:00
>> <class 'datetime.datetime'>

;