进阶第九课 Python模块之datetime

datetime模块定义了5个类,分别是:datetime.date、datetime.time、datetime.datetime、datetime.timedelta、tzinfo。

一、datetime.date:表示日期的类。

date类有三个参数,datetime.date(year,month,day),返回year-month-day

方法:

1.datetime.date.today()

>>> import datetime
>>> dir(datetime.date)
['__add__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__radd__', '__reduce__', '__reduce_ex__', '__repr__', '__rsub__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', 'ctime', 'day', 'fromordinal', 'fromtimestamp', 'isocalendar', 'isoformat', 'isoweekday', 'max', 'min', 'month', 'replace', 'resolution', 'strftime', 'timetuple', 'today', 'toordinal', 'weekday', 'year']
>>> datetime.date.today()
datetime.date(2018, 4, 9)
>>> datetime.date.today().year
2018
>>> datetime.date.today().month
4
>>> datetime.date.today().day
9
>>> datetime.date.today().__getattribute__('year')
2018
>>> datetime.date.today().__getattribute__('month')
4
>>> datetime.date.today().__getattribute__('day')
9

2.datetime.date.ctime(a),参数a是一个datetime.date对象,返回格式如 Sun Apr 16 00:00:00 2017

>>> import datetime
>>> a=datetime.date.today()
>>> a
datetime.date(2018, 4, 9)
>>> datetime.date.ctime(a)
'Mon Apr  9 00:00:00 2018'

>>> datetime.date.ctime(datetime.date(2008,4,4))
'Fri Apr 4 00:00:00 2008'
 

3.datetime.date.fromtimestamp(timestamp),根据给定的时间戮,返回一个datetime.date对象;datetime.date.today()作用相同

>>> import datetime
>>> import time
>>> a=time.time()
>>> datetime.date.fromtimestamp(a)
datetime.date(2018, 4, 9)

4.datetime.date.isocalendar(a):参数a是一个datetime.date对象,返回格式如(year,month,day)的元组,(2017, 15, 6)

>>> import datetime
>>> a=datetime.date.today()
>>> a
datetime.date(2018, 4, 9)
>>> datetime.date.isocalendar(a)
(2018, 15, 1)

>>> datetime.date.isocalendar(datetime.date(2008,4,4))
(2008, 14, 5)

5.datetime.date.isoformat(a):参数a是一个datetime.date对象,返回格式如YYYY-MM-DD

>>> import datetime
>>> a=datetime.date.today()
>>> a
datetime.date(2018, 4, 9)
>>> datetime.date.isoformat(a)
'2018-04-09'

6.datetime.date.isoweekday(a):参数a是一个datetime.date对象,返回给定日期的星期(0-6),星期一=0,星期日=6

>>> datetime.date.isoweekday(datetime.date(2008,4,4))
5

说明:参数a指定的是一个datetime.date对象,值为2008,4,4。返回值是5,代表2008年4月4日是周五。

7.datetime.date.replace(a):参数a是一个datetime.date对象,替换给定日期,但不改变原日期

>>> a=datetime.date(2008,4,4)
>>> b=datetime.date.replace(datetime.date(2018,4,9))
>>> b
datetime.date(2018, 4, 9)
>>> a
datetime.date(2008, 4, 4)

8.datetime.date.strftime(a,format):参数a是一个datetime.date对象,format格式看下面的日期时间格式化符号。把日期时间按照给定的format进行格式化。

>>> datetime.date.strftime(datetime.date(2018,4,9),'%Y--%m--%d %H:%M:%S')
'2018--04--09 00:00:00'

9.datetime.date.timetuple(a):参数a是一个datetime.date对象,返回日期对应的time.struct_time对象,time.struct_time(tm_year=2017, tm_mon=4, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=105, tm_isdst=-1)

>>> datetime.date.timetuple(datetime.date(2018,4,9))
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=9, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=99, tm_isdst=-1)

10.datetime.date.weekday(a):参数a是一个datetime.date对象,返回日期是一周的哪一天。周一:0、周二:1...周日:6

>>> datetime.date.weekday(datetime.date(2018,4,9))
0

11.datetime.date.max和datetime.date.min

在系统中,最大和最小值:公元9999年12月31日和公元1年1月1日。

>>> datetime.date.max
datetime.date(9999, 12, 31)
>>> datetime.date.min
datetime.date(1, 1, 1)

12、python中时间日期格式化符号:

%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 当前时区的名称

%% %号本身

13、代码示例集合

>>> from datetime import datetime,date,time #从模块datetime中导入datetime、date和time函数
>>> today=date.today()
>>> print(today)
2018-04-09
>>> import time
>>> a=time.time()
>>> a
1523281536.2069046
>>> print(date.fromtimestamp(1523281536.2069046)) #输出时间戳对应的日期
2018-04-09
>>> print(date.fromordinal(1))
0001-01-01
>>> print(date.min) #最小的年-月-日
0001-01-01
>>> print(date.max) #最大的年-月-日
9999-12-31
>>> print(date.resolution)
1 day, 0:00:00
>>> 
>>> d=date(2008,8,8) #date函数的三个参数,一个都不能少
>>> d1=d.replace(year=2016,day=10) 
>>> print(d) #d的值并未改变
2008-08-08
>>> print(d1)
2016-08-10
>>> print(d.toordinal())
733262
>>> print(d.weekday())
4
>>> print(d.isoweekday())
5
>>> print(d.isocalendar()) #返回年月日组成的元祖
(2008, 32, 5)
>>> print(d.isocalendar()[1]) #返回该日期是一年当中的第几周
32
>>> print(d.isocalendar()[2]) #返回当前日期是周几
5
>>> print(d.isoformat()) #返回格式YYYY-MM-DD
2008-08-08
>>> print(d.strftime("%d%m%y"))
080808
>>> print(d.__format__("%d%m%y"))
080808
>>> print(d.ctime())
Fri Aug  8 00:00:00 2008

 二、datetime.datetime:表示日期时间的类。

datetime类有很多参数,datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]),返回年月日,时分秒

1、datetime.datetime.ctime()

>>> from datetime import datetime
>>> dir(datetime)
['__add__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__radd__', '__reduce__', '__reduce_ex__', '__repr__', '__rsub__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', 'astimezone', 'combine', 'ctime', 'date', 'day', 'dst', 'fold', 'fromordinal', 'fromtimestamp', 'hour', 'isocalendar', 'isoformat', 'isoweekday', 'max', 'microsecond', 'min', 'minute', 'month', 'now', 'replace', 'resolution', 'second', 'strftime', 'strptime', 'time', 'timestamp', 'timetuple', 'timetz', 'today', 'toordinal', 'tzinfo', 'tzname', 'utcfromtimestamp', 'utcnow', 'utcoffset', 'utctimetuple', 'weekday', 'year']


>>> datetime.ctime(datetime(2018,3,1))
'Thu Mar  1 00:00:00 2018'

2、datetime.datetime.now().date():返回当前日期时间的日期部分,返回值是一个datetime.date对象。

>>> datetime.datetime.now().date()
datetime.date(2018, 3, 31)

即2018年3月31日

3、datetime.datetime.now().time():返回当前日期时间的时间部分 ,返回值是一个datetime.time对象。

>>> datetime.datetime.now().time()
datetime.time(7, 44, 54, 845875)

即7点44分54秒...

4、datetime.datetime.fromtimestamp(a):a是一个时间戳数值,返回值是一个datetime.datetime对象。

>>> a=time.time()
>>> a
1523276251.6091144
>>> b=2523276251.6091144
>>> datetime.datetime.fromtimestamp(a)
datetime.datetime(2018, 4, 9, 20, 17, 31, 609114)
>>> datetime.datetime.fromtimestamp(b)
datetime.datetime(2049, 12, 16, 22, 4, 11, 609114)

a是通过time.time()取得系统当前时间戳的数值,b是把a的首位数1改为2得来的数值。 

5、datetime.datetime.now():返回当前系统时间

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2018, 3, 31, 7, 43, 18, 868394)

6、datetime.datetime.replace()

>>> from datetime import datetime
>>> a=datetime(2018, 4, 9, 20, 17, 31, 609114)
>>> a
datetime.datetime(2018, 4, 9, 20, 17, 31, 609114)
>>> a.replace(year=2050,day=15)
datetime.datetime(2050, 4, 15, 20, 17, 31, 609114)
>>> a
datetime.datetime(2018, 4, 9, 20, 17, 31, 609114)

7、datetime.datetime.strftime():由日期格式转化为字符串格式。

>>> datetime.datetime.now().strftime('%b-%d-%Y %H:%M:%S')
'Mar-31-2018 07:44:09'

8、datetime.datetime(a).strptime(b):参数a的格式与datetime.datetime.now()返回值的值格式相同,b是格式化符号字符串。返回结果是由字符串格式转化为日期格式。

>>> datetime.datetime(2018, 3, 31, 7, 43, 18, 868394).strftime('%b-%d-%Y %H:%M:%S')
'Mar-31-2018 07:43:18'

三、datetime.time:表示时间的类。

time类有5个参数,datetime.time(hour,minute,second,microsecond,tzoninfo),返回08:29:30

>>> from datetime import time
>>> a=time(12,20,59,899)
>>> a
datetime.time(12, 20, 59, 899)
>>> a.hour
12
>>> a.minute
20
>>> a.second
59
>>> a.microsecond
899

date类一样,time类也包含__getattribute__(...)方法可以读取相关属性:

>>> a.__getattribute__('hour')
12
>>> a.__getattribute__('minute')
20
>>> a.__getattribute__('second')
59

1.datetime.time.replace()

>>> a.replace(hour=22)
datetime.time(22, 35, 30, 1899)
>>> a
datetime.time(20, 35, 30, 1899)

道理同上。replace返回了一个新的time类的值,但是a的值未做修改。

2.datetime.time.strftime(format):按照format格式返回时间

>>> from datetime import time
>>> a=time(20,35,30,1899)
>>> a.strftime('%H:%M:%S')
'20:35:30'
>>> a.strftime('%Y-%m-%d %H:%M:%S')
'1900-01-01 20:35:30'

一个time类的对象,对应的年月日都是默认的1900年1月1日。

3.datetime.time.tzname():返回时区名字

 

4.datetime.time.utcoffset():返回时区的时间偏移量

 

四、datetime.timedelta:表示时间间隔,即两个时间点的间隔。

datetime.datetime.timedelta用于计算两个日期之间的差值,例如:

>>> a=datetime.datetime.now()
>>> b=datetime.datetime.now()
>>> a
datetime.datetime(2017, 4, 16, 21, 21, 20, 871000)
>>> b
datetime.datetime(2017, 4, 16, 21, 21, 29, 603000)
>>> b-a
datetime.timedelta(0, 8, 732000)
>>> (b-a).seconds
8

五、datetime.tzinfo:时区的相关信息。

 

 

网上找到的代码集合

import time
import datetime

"""
datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1.
datetime模块定义了5个类,分别是
1.datetime.date:表示日期的类
2.datetime.datetime:表示日期时间的类
3.datetime.time:表示时间的类
4.datetime.timedelta:表示时间间隔,即两个时间点的间隔
5.datetime.tzinfo:时区的相关信息
"""


# 1、date类
"""
class date(builtins.object)
     |  date(year, month, day) --> date object
"""
# 创建datetime.date对象方法
print(datetime.date(2018, 1, 19))                       # 3个int值
print(datetime.date.fromtimestamp(time.time()))         # 时间戳
print(datetime.date(2018, 1, 20).replace(2018, 1, 19))  # 3个int值替换一个datetime.date对象
print(datetime.date.today())                            # 今天的datetime.date对象
print(datetime.date.fromordinal(736713))                # 从一个日期顺序值获取,1对应0001-01-01

# datetime.date对象的运算方法
print(datetime.date(2018, 1, 19) + datetime.timedelta(1))
print(datetime.date(2018, 1, 19) + datetime.timedelta(-1))
print(datetime.date(2018, 1, 20) - datetime.date(2018, 1, 19))
print(datetime.date(2018, 1, 20) - datetime.timedelta(1))
print(type(datetime.date(2018, 1, 20) - datetime.date(2018, 1, 19)))  # <class 'datetime.timedelta'>
print(datetime.date(2018, 1, 19) == datetime.date(2018, 1, 19))
print(datetime.date(2018, 1, 19) >= datetime.date(2018, 1, 19))
print(datetime.date(2018, 1, 19) > datetime.date(2018, 1, 19))
print(datetime.date(2018, 1, 19) <= datetime.date(2018, 1, 19))
print(datetime.date(2018, 1, 19) < datetime.date(2018, 1, 19))
print(datetime.date(2018, 1, 19) != datetime.date(2018, 1, 19))

# 获取datetime.date对象属性
print(getattr(datetime.date(2018, 1, 19), 'year'))
print(getattr(datetime.date(2018, 1, 19), 'month'))
print(getattr(datetime.date(2018, 1, 19), 'day'))
print(datetime.date(2018, 1, 19).year)
print(datetime.date(2018, 1, 19).month)
print(datetime.date(2018, 1, 19).day)

# 判断星期几
# weekday Monday == 0 ... Sunday == 6
print(datetime.date.weekday(datetime.date.today()))
# isoweekday Monday == 1 ... Sunday == 7
print(datetime.date.isoweekday(datetime.date.today()))

# datetime.date对象格式化
print(repr(datetime.date(2018, 1, 19)))        # datetime.date(2018, 1, 19)
print(type(repr(datetime.date(2018, 1, 19))))  # <class 'str'>
print(str(datetime.date(2018, 1, 19)))         # 2018-01-19
print(datetime.date.ctime(datetime.date(2018, 1, 19)))  # Sat Jan 19 00:00:00 2018
print(datetime.date.isocalendar(datetime.date(2018, 1, 19)))  # (ISO year, week number, and weekday)
print(datetime.date.isoformat(datetime.date(2018, 1, 19)))    # 2018-01-19
print(datetime.date.strftime(datetime.date.today(), '%Y'))
print(datetime.date.timetuple(datetime.date.today()))         # tm_isdst=-1
print(time.localtime())                                       # tm_isdst=0

# 其他
print(hash(datetime.date(2018, 1, 19)))
print(datetime.date.toordinal(datetime.date.today()))


# 2、datetime类
"""
class datetime(date)
     |  datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
     |  
     |  The year, month and day arguments are required. tzinfo may be None, or an
     |  instance of a tzinfo subclass. The remaining arguments may be ints.
"""


# 创建datetime.datetime对象方法
print(datetime.datetime(2018, 1, 19, 11, 6, 30, 1000))
print(datetime.datetime.now())
print(datetime.datetime.combine(datetime.date.today(), datetime.time(10, 2, 30)))
print(datetime.datetime.fromtimestamp(time.time()))
print(datetime.datetime.now().replace(2018, 1, 19, 11, 6, 30, 1000))
print(datetime.datetime.strptime('2018-10-20', '%Y-%m-%d'))
print(datetime.datetime.utcfromtimestamp(time.time()))  # 本地时间减8小时
print(datetime.datetime.utcnow())

# datetime.datetime对象的运算方法
print(datetime.datetime.now() + datetime.timedelta(1))
print(datetime.datetime.now() - datetime.timedelta(1))
print(datetime.datetime.now() - datetime.datetime.now())
print(datetime.datetime.now() == datetime.datetime.now())
print(datetime.datetime.now() >= datetime.datetime.now())
print(datetime.datetime.now() > datetime.datetime.now())
print(datetime.datetime.now() <= datetime.datetime.now())
print(datetime.datetime.now() < datetime.datetime.now())
print(datetime.datetime.now() != datetime.datetime.now())

# 获取datetime.datetime对象属性
print(getattr(datetime.datetime.now(), 'year'))
print(getattr(datetime.datetime.now(), 'month'))
print(getattr(datetime.datetime.now(), 'day'))
print(getattr(datetime.datetime.now(), 'hour'))
print(getattr(datetime.datetime.now(), 'minute'))
print(getattr(datetime.datetime.now(), 'second'))
print(getattr(datetime.datetime.now(), 'microsecond'))
print(getattr(datetime.datetime.now(), 'tzinfo'))
print(getattr(datetime.datetime.now(), 'fold'))
print(datetime.datetime.now().year)
print(datetime.datetime.now().month)
print(datetime.datetime.now().day)
print(datetime.datetime.now().hour)
print(datetime.datetime.now().minute)
print(datetime.datetime.now().second)
print(datetime.datetime.now().microsecond)
print(datetime.datetime.now().tzinfo)
print(datetime.datetime.now().fold)

# datetime.datetime对象格式化
print(repr(datetime.datetime.now()))
print(datetime.datetime.ctime(datetime.datetime.now()))
print(datetime.datetime.isoformat(datetime.datetime.now()))
print(datetime.datetime.timestamp(datetime.datetime.now()))
print(datetime.datetime.timetuple(datetime.datetime.now()))
print(datetime.datetime.utctimetuple(datetime.datetime.now()))

# 其他
print(hash(datetime.datetime.now()))
print(datetime.datetime.astimezone(datetime.datetime.now()))
print(datetime.datetime.time(datetime.datetime.now()))
print(datetime.datetime.timetz(datetime.datetime.now()))
print(datetime.datetime.tzname(datetime.datetime.now()))
print(datetime.datetime.date(datetime.datetime.now()))
print(datetime.datetime.dst(datetime.datetime.now()))
print(datetime.datetime.utcoffset(datetime.datetime.now()))

# 继承datetime.date对象的方法
# toordinal(...)
# fromordinal(...)
# isoweekday(...)
# weekday(...)
# today(...)
# isocalendar(...)
# strftime(...)


# 3、time类
"""
class time(builtins.object)
     |  time([hour[, minute[, second[, microsecond[, tzinfo]]]]]) --> a time object
     |  
     |  All arguments are optional. tzinfo may be None, or an instance of
     |  a tzinfo subclass. The remaining arguments may be ints.
"""

# 创建datetime.time对象方法
print(datetime.time(11, 40, 30))
print(datetime.time(11, 40, 30).replace(12, 30, 20))

# datetime.time对象的运算方法
print(datetime.time(11, 40, 30) == datetime.time(11, 40, 30))
print(datetime.time(11, 40, 30) >= datetime.time(11, 40, 30))
print(datetime.time(11, 40, 30) > datetime.time(11, 40, 30))
print(datetime.time(11, 40, 30) <= datetime.time(11, 40, 30))
print(datetime.time(11, 40, 30) < datetime.time(11, 40, 30))
print(datetime.time(11, 40, 30) != datetime.time(11, 40, 30))

# 获取datetime.time对象属性
print(getattr(datetime.time(11, 40, 30), 'hour'))
print(getattr(datetime.time(11, 40, 30), 'minute'))
print(getattr(datetime.time(11, 40, 30), 'second'))
print(getattr(datetime.time(11, 40, 30), 'microsecond'))
print(getattr(datetime.time(11, 40, 30), 'tzinfo'))
print(getattr(datetime.time(11, 40, 30), 'fold'))
print(datetime.time(11, 40, 30).hour)
print(datetime.time(11, 40, 30).minute)
print(datetime.time(11, 40, 30).second)
print(datetime.time(11, 40, 30).microsecond)
print(datetime.time(11, 40, 30).tzinfo)
print(datetime.time(11, 40, 30).fold)

# datetime.time对象格式化
print(repr(datetime.time(11, 40, 30)))
print(str(datetime.time(11, 40, 30)))
print(datetime.time.strftime(datetime.time(11, 40, 30), '%H'))

# 其他
print(hash(datetime.time(11, 40, 30)))
print(datetime.time.dst(datetime.time(11, 40, 30)))
print(datetime.time.isoformat(datetime.time(11, 40, 30)))
print(datetime.time.tzname(datetime.time(11, 40, 30)))
print(datetime.time.utcoffset(datetime.time(11, 40, 30)))


# 4、timedelta类
"""
class timedelta(builtins.object)
     |  Difference between two datetime values.
         def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ...,
                 milliseconds: float = ..., minutes: float = ..., hours: float = ...,
                 weeks: float = ...) -> None: ...
"""

# 创建datetime.timedelta类对象方法
print(datetime.timedelta(weeks=0.5, days=1, hours=2, minutes=10, seconds=20, milliseconds=100, microseconds=10000))

# datetime.timedelta对象的运算方法
print(abs(datetime.timedelta(weeks=-1, days=1, hours=2, minutes=10, seconds=20, microseconds=10000)))
print(datetime.timedelta(minutes=10) + datetime.timedelta(seconds=20))
print(datetime.timedelta(minutes=0) != datetime.timedelta(minutes=1))
print(divmod(datetime.timedelta(minutes=10), datetime.timedelta(minutes=3)))
print(datetime.timedelta(minutes=0) == datetime.timedelta(minutes=1))
print(datetime.timedelta(minutes=10) // datetime.timedelta(minutes=3))
print(datetime.timedelta(minutes=0) >= datetime.timedelta(minutes=1))
print(datetime.timedelta(minutes=0) > datetime.timedelta(minutes=1))
print(datetime.timedelta(minutes=0) <= datetime.timedelta(minutes=1))
print(datetime.timedelta(minutes=0) < datetime.timedelta(minutes=1))
print(datetime.timedelta(minutes=10) % datetime.timedelta(minutes=3))
print(datetime.timedelta(minutes=10) * 3)
print(-datetime.timedelta(minutes=10))
print(+datetime.timedelta(minutes=10))
print(datetime.timedelta(minutes=10) / datetime.timedelta(minutes=3))  # float

# datetime.timedelta对象的属性
print(getattr(datetime.timedelta(minutes=10), 'days'))
print(getattr(datetime.timedelta(minutes=10), 'seconds'))
print(getattr(datetime.timedelta(minutes=10), 'microseconds'))
print(datetime.timedelta(minutes=10).days)
print(datetime.timedelta(minutes=10).seconds)
print(datetime.timedelta(minutes=10).microseconds)

# timedelta对象格式化
print(repr(datetime.timedelta(minutes=10)))
print(str(datetime.timedelta(minutes=10)))

# 其他
print(hash(datetime.timedelta(minutes=10)))
print(datetime.timedelta(minutes=10).total_seconds())
print(datetime.timedelta.total_seconds(datetime.timedelta(minutes=10)))


# 5、timezone类
"""
class timezone(tzinfo)
     |  Fixed offset from UTC implementation of tzinfo.
"""
ti = datetime.timezone(offset=datetime.timedelta(hours=8), name='east8')  # 创建时区对象
print(ti.tzname(datetime.datetime.now()))      # east8
print(ti.utcoffset(datetime.datetime.now()))   # 8:00:00
print(ti.dst(datetime.datetime.now()))         # 夏令时,返回None

u = datetime.datetime(2018, 1, 19, 14, 7, tzinfo=ti)
t = ti.fromutc(u)
print(t)

 

posted @ 2018-03-30 19:56  驼背蜗牛  阅读(276)  评论(0编辑  收藏  举报