python——datetime模块

Python编程:深入理解datetime模块
本文详细介绍了Python的datetime模块,包括date、time、datetime、timedelta和tzinfo类。date类用于处理日期,time类处理时间,datetime类结合了date和time,timedelta处理时间间隔,tzinfo则涉及时区信息。每个类都包含多个方法和属性,为时间日期操作提供了强大支持。

datetime模块

datetime模块相比time模块提供了更多功能,主要有五个类,date(日期),time(时间),datetime(日期时间),timedelta(时间差),tzinfo(时区信息)。

1. date类

datetime.date(year,month,day)

  • 类方法和类属性
from datetime import *
import time
print(date.max)  # 这是date类的类属性max,即一个date类能够表示的最大日期,是9999-12-31。
print(date.min)  # 这是date类的类属性min,即一个date类能够表示的最小日期,是0001-01-01。
print(date.fromtimestamp(1214123413)) #这是date类的类方法,将时间戳转换成年月日格式的字符串
2008-06-22 <class 'datetime.date'>
print(date.today())  #这是date类的类方法today,调用了类的fromtimestamp,输出当前年月日。
2019-10-09
  • 对象方法和对象属性
----------欢迎加入我的python新手交流群851211580------------
from datetime import *
import time
print(date.max)  # 这是date类的类属性max,即一个date类能够表示的最大日期,是9999-12-31。
print(date.min)  # 这是date类的类属性min,即一个date类能够表示的最小日期,是0001-01-01。
print(date.fromtimestamp(1214123413)) #这是date类的类方法,将时间戳转换成年月日格式的字符串
print(date.today())  #这是date类的类方法today,调用了类的fromtimestamp,输出当前年月日。

d1 = date(2019,10,9)  #创建一个date实例(由类创建的一个对象叫类的一个实例,也可以叫date对象),实例的属性年,月,日必须是整数。
print(d1.year)  #这是date实例d1的实例属性year,获得第一个参数2018
print(d1.month) #这是date实例d1的实例属性month,获得第二个参数9
print(d1.day)  #这是date实例d1的实例属性day,获得第三个参数2
print(d1.ctime())  #实例d1的对象方法,返回一个本地时间的字符串,Sun Sep  2 00:00:00 2018
print(d1.replace(year=2019,month=9,day=11))  #生成一个新的date对象(实例),用指定的年,月,日替换原有对象中的属性。(原对象仍保持不变)
print(d1.timetuple())#返回日期对应的time.struct_time对象。
print(d1.weekday()) #返回weekday,如果是星期一,返回1,如果是星期天,返回0,依此类推
print(d1.isoweekday()) #返回基于ISO标准的星期数对应的数值,如果是星期一,返回1,如果是星期天,返回7,依此类推
print(d1.isocalendar()) #返回基于ISO时间的日历的元组。(2019, 41, 3)
print(d1.isoformat(),type(d1.isoformat()))  #返回基于ISO标准的字符串,即格式如'YYYY-MM-DD'的字符串
print(d1.strftime('%Y/%m/%d'),type(d1.strftime('%Y/%m/%d')))  #返回指定格式的字符串。


9999-12-31
0001-01-01
2008-06-22
2019-10-09
2019
10
9
Wed Oct  9 00:00:00 2019
2019-09-11
time.struct_time(tm_year=2019, tm_mon=10, tm_mday=9, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=282, tm_isdst=-1)
2
3
(2019, 41, 3)
2019-10-09 <class 'str'>
2019/10/09 <class 'str'>

在这里插入图片描述

2. time类

datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

  • 类方法和类属性
print(time.min)  #这是datetime模块里面time类的类属性min,表示能表示的最小时间。
print(time.max) #这是datetime模块里面time类的类属性max,表示能表示的最大时间。
print(time.resolution)  #类属性,是1微秒。
print(time.fromisoformat('21:20:53')) #类方法,将字符串转换成基于ISO标准指定格式的时间

00:00:00
23:59:59.999999
0:00:00.000001
21:20:53
  • time对象的方法和属性
t1 = time(21,33,20,55)  #创建一个time对象t1,即21:33:33.55
print(t1.hour,t1.minute,t1.second,t1.microsecond)  #time对象t1具有多个对象属性
t2 = t1.replace(hour=22,minute=22) #将其属性用指定参数进行替换,并返回一个新的time对象。
print(t1.isoformat())  #返回形如'HH:MM:SS'格式的字符串
print(t1.strftime('%H/%M/%S'))  #返回指定格式的字符串

21 33 20 55
21:33:20.000055
21/33/20
3. datetime类

datetime继承自date类。datetime相当于date和time类的结合。
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]),year,month,day,是必输参数,其他都是可选参数。

  • 类方法和类属性
print(datetime.today())  #类方法,返回一个表示当前本地时间的datetime对象
print(datetime.now())  #类方法,返回一个表示当前本地时间的datetime对象,如果有参数tz,则获取tz参数所指时区的本地时间。
print(datetime.utcnow()) #类方法,返回一个当前utc时间的datetime对象。就是格林威治时间。
print(datetime.fromtimestamp(13421341324))  #类方法,根据时间戳创建一个datetime对象,如果有参数tz,则返回tz所指时区的本地时间。
print(datetime.utcfromtimestamp(134213))  #类方法,根据时间戳创建一个utc时间的datctime对象。
print(datetime.combine(date(2019,10,8),time(11,30,31)))  #类方法,根据date对象和time对象创建一个datetime对象。
print(datetime.strptime('2019-10-01 21:33:22','%Y-%m-%d %H:%M:%S'))  # 类方法,将格式字符串转换为datetime对象

2019-10-09 21:30:41.375334
2019-10-09 21:30:41.375333
2019-10-09 13:30:41.375333
2395-04-22 22:22:04
1970-01-02 13:16:53
2019-10-08 11:30:31
2019-10-01 21:33:22
  • 对象方法和属性
from datetime import *

dt1 = datetime(2019,10,2,12,36,33)  #只有年,月,日参数是必输的。创建一个datetime对象。
print(dt1.year,dt1.month,dt1.day,dt1.hour,dt1.minute,dt1.second,dt1.microsecond,dt1.tzinfo)  # 对象属性
print(dt1.date(),type(dt1.date())) #对象方法,获取date对象
print(dt1.time(),type(dt1.time())) #对象方法,获取time对象
print(dt1.replace(year = 2018)) #将指定参数进行替换,并返回一个新的datetime对象
print(dt1.timetuple())  #返回本地时间的time.struct_time对象,即时间元组。
print(dt1.utctimetuple())  #返回utc时间的时间元组
print(dt1.toordinal()) #返回当前日期距公历1年1月1日的天数
print(dt1.weekday()) #返回今天是星期几,用数字代替星期几,0是星期天,1是星期一,依此类推
print(dt1.isoweekday()) #返回今天是星期几,用数字代替星期几,7是星期天,1是星期一,依此类推
print(dt1.isocalendar()) #返回以元组形式的(年,月,日)


2019 10 2 12 36 33 0 None
2019-10-02 <class 'datetime.date'>
12:36:33 <class 'datetime.time'>
2018-10-02 12:36:33
time.struct_time(tm_year=2019, tm_mon=10, tm_mday=2, tm_hour=12, tm_min=36, tm_sec=33, tm_wday=2, tm_yday=275, tm_isdst=-1
)
time.struct_time(tm_year=2019, tm_mon=10, tm_mday=2, tm_hour=12, tm_min=36, tm_sec=33, tm_wday=2, tm_yday=275, tm_isdst=0)

737334
2
3
(2019, 40, 3)

4.imedelta类

timedelta类是datetime对象加减的类。

使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。

dt2 = datetime.now()  #创建一个本地当前时间的datetime对象
dt3 = dt2 + timedelta(days=1)  #明天
dt4 = dt2 + timedelta(days=-1)  #昨天
delta_obj = dt3 - dt2  #获得一个timedelta对象
print(dt2,dt3,sep='\t')
print(type(delta_obj),delta_obj,delta_obj.days,delta_obj.total_seconds(),sep='\n')  
#timedelta对象有days, seconds, microseconds,milliseconds, minutes, hours, weeks等属性,total_seconds()方法。

2019-10-09 22:04:11.841300      2019-10-10 22:04:11.841300
<class 'datetime.timedelta'>
1 day, 0:00:00
1
86400.0
5. tzinfo时区类

tzinfo是一个关于时区信息的抽象基类,不能直接实例化,必须创建一个子类。
tzinfo的子类必须重载tzname(), utcoffset() and dst()方法.

from datetime import *

class UTC(tzinfo):  #UTC类继承自tzinfo类
    """UTC"""
    def __init__(self,offset = 0):  #构造函数__init__,默认UTC对象的offset属性,即时区基准点是0
        self._offset = offset

    def utcoffset(self, dt):
        return timedelta(hours=self._offset)

    def tzname(self, dt):  #定义UTC对象的获取时区名字方法,参数是一个datetime对象
        return "UTC +%s" % self._offset

    def dst(self, dt):  #
        return timedelta(hours=self._offset)

# 北京时间
bj_time = datetime(2019, 10, 9, 22, 24, 23, tzinfo=UTC(8))  # 设置时区,tzinfo形参是一个UTC对象
# 曼谷时间
bangkok = datetime(2019, 10, 9, 22, 24, 23, tzinfo=UTC(7))
print(bj_time,bangkok,sep='\n')
# 将北京时间转换成曼谷时间
print(bj_time.astimezone(tz=UTC(7)))
#计算时差
timecha =  bj_time - bangkok
print(timecha,type(timecha))

2019-10-09 22:24:23+08:00
2019-10-09 22:24:23+07:00
2019-10-09 21:24:23+07:00
-1 day, 23:00:00 <class 'datetime.timedelta'>

ps:完全记不住,只能先放在这儿,用时再看了。
只记住time.time(),time.sleep(),datetime.now(),datetime.today(). 至于strftime(),strptime(),只知道要接两个参数,一个是格式化在前,另外一个是时间元组对象。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值