Python模块之datetime

一、模块介绍

datetime模块中包含如下类:

>>> import datetime
>>> dir(datetime)
			     
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']
类名功能说明
datetime.date表示日期的类,常用属性:year, month, day
datetime.time表示时间的类,常用属性:hour, minute, second, microsecond, tzinfo
datetime.datetime表示日期和时间的类,常用属性: year, month, day, hour, minute, second, microsecond, tzinfo
datetime.timedelta表示时间间隔,即两个时间点(date,time,datetime)之间的长度
datetime.timezone表示 UTC 时区的固定偏移,是 tzinfo 基类的实现
datetime.tzinfo表示时区的基类,为上方的 time 和 datetime 类提供调整的基准
datetime_CAPI日期时间对象C语言接口

二、类介绍

1. datetime.date

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

datetime.date(year, month, day)

  1. 所有的参数都是必需的,参数可以是整数,并且在以下范围内:

MINYEAR <= year <= MAXYEAR(也就是 1 ~ 9999)
1 <= month <= 12
1 <= day <= 根据 year 和 month 来决定(例如 2015年2月 只有 28 天)

  • date类方法(classmethod)

>>> 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’, ‘fromisoformat’, ‘fromordinal’, ‘fromtimestamp’, ‘isocalendar’, ‘isoformat’, ‘isoweekday’, ‘max’, ‘min’, ‘month’, ‘replace’, ‘resolution’, ‘strftime’, ‘timetuple’, ‘today’, ‘toordinal’, ‘weekday’, ‘year’]

  1. date.today()
>>> datetime.date.today()	#date.today()用法
datetime.date(2020, 2, 24)
>>> datetime.date.today().year	     
2020
>>> datetime.date.today().month		     
2
>>> datetime.date.today().day		     
24
>>> datetime.date.today().__getattribute__('year')	     
2020
>>> datetime.date.today().__getattribute__('month')		     
2
>>> datetime.date.today().__getattribute__('day')		     
24
  1. datetime.date.ctime(arg)
    参数arg是一个datetime.date对象,返回格式如:Mon Feb 24 00:00:00 2020
    相当于 time 模块的 time.ctime(time.mktime(d.timetuple()))

  2. datetime.date.fromtimestamp(timestamp)
    根据给定的时间戮,返回一个datetime.date对象。

>>> import datetime,time		     
>>> now_stamp = time.time()
>>> now_stamp     
1582533478.5588923
>>> now = datetime.date.fromtimestamp(now_stamp)  
>>> now     
datetime.date(2020, 2, 24)
  1. datetime.date.isocalendar(arg)
    参数arg是一个datetime.date对象,返回一个三元组格式 (ISO year, week number, weekday)

  2. datetime.date.isoformat(a)
    参数a是一个datetime.date对象,返回一个 ISO 8601 格式的日期字符串,如 “YYYY-MM-DD” 的字符串

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

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

日期格式化符号说明范围
%Y四位数的年份0000-9999
%m月份01-12
%d月内中的一天0-31
%H24小时制小时数0-23
%M分钟数00-59
%S00-59
  1. datetime.date.timetuple(a)
    参数a是一个datetime.date对象,返回日期对应的time.struct_time对象(类似于 time 模块 的 time.localtime())
>>> datetime.date.timetuple(datetime.date.today())		     
time.struct_time(tm_year=2020, tm_mon=2, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=55, tm_isdst=-1)
  1. datetime.date.replace((year, month, day)
    生成一个新的日期对象,用参数指定的年、月、日代替原有对象中的属性(但不改变原日期)
 >>> now
datetime.date(2020, 2, 24)
>>> now.replace(day = 7)     
datetime.date(2020, 2, 7)
>>> now
datetime.date(2020, 2, 24)
  1. datetime.date.fromordinal()和datetime.date.toordinal()
## 自日期 1.1.0001 之后的第 735678 天
>>> d = datetime.date.fromordinal(735678)			     
>>> d		     
datetime.date(2015, 3, 21)

>>> now = datetime.date(2020,12,31)
>>> datetime.date.toordinal(now) #计算从now到1.1.0001 过了几天
737790

2. datetime.time

  • time类对象
    time 对象表示一天中的一个时间,并且可以通过 tzinfo 对象进行调整。
datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

所有的参数都是可选的;tzinfo 可以是 None 或者 tzinfo 子类的实例对象;其余的参数可以是整数,并且在以下范围内:

0 <= hour < 24
0 <= minute < 60
0 <= second < 60
0 <= microsecond < 1000000
注:如果参数超出范围,将引发 ValueError 异常

  • time 类属性

time.min - time 对象所能表示的最早时间,time(0, 0, 0, 0)
time.max - time 对象所能表示的最晚时间,time(23, 59, 59, 999999)
time.resolution - time 对象表示时间的最小单位,在这里是 1 毫秒,timedelta(microseconds=1)

3. datetime.datetime

  • datetime类对象
    datetime 对象是 date 对象和 time 对象的结合体,并且包含他们的所有信息。
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]

必须的参数是 year(年)、month(月)、day(日);tzinfo 可以是 None 或者 tzinfo 子类的实例对象;其余的参数可以是整数,并且在以下范围内:

MINYEAR <= year <= MAXYEAR(也就是 1 ~ 9999)
1 <= month <= 12
1 <= day <= 根据 year 和 month 来决定(例如 2015年2月 只有 28 天)
0 <= hour < 24
0 <= minute < 60
0 <= second < 60
0 <= microsecond < 1000000
注:如果参数超出范围,将引发 ValueError 异常

  • datetime 类方法(classmethod)
    >>> dir(datetime.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’, ‘fromisoformat’, ‘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’]
  1. datetime.today()
    返回一个表示当前本地时间的 datetime 对象
>>> from datetime import datetime
>>> today = datetime.today()
>>> today
datetime.datetime(2020, 2, 25, 21, 10, 50, 795525)
>>> print(datetime.today())
2020-02-25 21:11:09.867502
>>> str(today)
'2020-02-25 21:10:50.795525' 
  1. datetime.now(tz=None)
    返回一个表示当前本地时间的 datetime 对象;如果提供了参数 tz,则获取 tz 参数所指时区的本地时间
>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2020, 2, 25, 21, 13, 31, 814895)

#返回当前日期时间的日期部分,返回值是一个datetime.date对象	  
>>> datetime.now().date()
datetime.date(2020, 2, 25)

#返回当前日期时间的时间部分 ,返回值是一个datetime.time对象
>>> datetime.now().time()
datetime.time(21, 42, 18, 451723)


  1. datetime.utcnow()
    返回一个当前 UTC 时间的 datetime 对象

UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同。在本文中,UTC与GMT含义完全相同。
北京时区是东八区,领先UTC八个小时

>>> from datetime import datetime
>>> utc_now = datetime.utcnow()
>>> utc_now
datetime.datetime(2020, 2, 25, 13, 20, 52, 245685)
>>> print(utc_now)
2020-02-25 13:20:52.245685
>>> print(datetime.now())
2020-02-25 21:23:27.179176
  1. datetime.fromtimestamp(timestamp, tz=None)
    根据时间戮创建一个 datetime 对象,参数 tz 指定时区信息
>>> from datetime import datetime
>>> import time
>>>> str(datetime.fromtimestamp(time.time()))
'2020-02-25 21:25:59.034310'
>>> datetime.fromtimestamp(time.time()).year
2020
  1. datetime.utcfromtimestamp(timestamp)
    根据时间戮创建一个 UTC 时间的 datetime 对象
  2. datetime.fromordinal(integer) && datetime.toordinal(datetime.date)
## 自日期 1.1.0001 之后的第 735678 天
>>> print(datetime.fromordinal(735678))
2015-03-21 00:00:00

 #计算从now到1.1.0001 过了几天
>>> print(datetime.toordinal(datetime.now()))
737480
  1. datetime.combine(date, time)
    根据参数 date 和 time,创建一个 datetime 对象
  2. datetime.replace()
>>>from datetime import datetime
>>> now = datetime.now()
>>> print(now)
2020-02-25 21:46:48.817810
>>> print(now.replace(day=28,hour=23,minute=59,second=59))
2020-02-28 23:59:59.817810
  1. datetime.strftime(date,format)
    由日期格式转化为字符串格式。
>>>from datetime import datetime
>>> now = datetime.now()
>>> print(now)
2020-02-25 21:51:01.522226
>>> print(datetime.strftime(now,'%Y%m%d%H%M%S'))
20200225215101
日期格式化符号说明范围
%Y四位数的年份0000-9999
%m月份01-12
%d月内中的一天0-31
%H24小时制小时数0-23
%M分钟数00-59
%S00-59
%a本地简化星期名称
%b本地简化的月份名称
%d月内中的一天0-31
  1. datetime.strptime((“时间字符串”,format)
    将格式时间字符串转换为datetime对象
>>> from datetime import datetime
>>> datetime.strptime("2020-03-05 21:54","%Y-%m-%d %H:%M")
datetime.datetime(2020, 3, 5, 21, 54)
  1. datetime.timestamp(date)
    返回指定时间的时间戳
>>> from datetime import datetime
>>> now	 = datetime.now()	    
>>> datetime.timestamp(now)	    
1582639315.625186
>>> print(datetime.fromtimestamp(datetime.timestamp(now)))			    
2020-02-25 22:01:55.625186
  1. 剩下的classmethod
>>> from datetime import datetime
>>> now = datetime.today()	    
>>> print(now)		    
2020-02-25 22:09:49.496281  #周二
>>> 		    
>>> print(datetime.weekday(now)) #返回 0 ~ 6 表示星期几(星期一是 0,依此类推)		    
1
>>> print(datetime.isoweekday(now)) #返回 1 ~ 7 表示星期几(星期一是1, 依此类推)
2
>>> print(datetime.isocalendar(now)) #返回一个三元组格式 (ISO year, week number, weekday)  
(2020, 9, 2)
>>> 
>>> time_str = datetime.__str__(now) #对于 date 对象 d 来说,相当于 str(d)		    
>>> print(time_str,type(time_str))			    
2020-02-25 22:09:49.496281 <class 'str'>

>>> print(datetime.ctime(now)) #返回一个表示日期的字符串		    
Tue Feb 25 22:09:49 2020

4. datetime.timedelta

属性取值范围
timedelta.days-999999999 ~ 999999999
timedelta.seconds0 ~ 86399
timedelta.microseconds0 ~ 999999

python使用datetime模块timedelta实现日期时间相加

>>> from datetime import datetime
>>> from datetime import timedelta
>>> now = datetime.now()
#计算天数差
>>> delta_day = timedelta(days=1)
>>> tomorrow = now + delta_day
>>> print(now);print(tomorrow)
2020-02-26 15:52:41.367867
2020-02-27 15:52:41.367867
#计算小时差	
>>> delta_hour = timedelta(hours=3)     
>>> next_hour = now + delta_hour
>>> print(now);print(next_hour)	     
2020-02-26 15:52:41.367867
2020-02-26 18:52:41.367867
#计算分钟差		     
>>> delta_minute = timedelta(minutes=10)			     
>>> next_minute = now + delta_minute		     
>>> print(now);print(next_minute)	     
2020-02-26 15:52:41.367867
2020-02-26 16:02:41.367867
#计算秒钟差	
>>> delta_second = timedelta(seconds=30)	     
>>> next_second = now + delta_second		     
>>> print(now);print(next_second)		     
2020-02-26 15:52:41.367867
2020-02-26 15:53:11.367867
>>> 

timedelta运算方法

>>> print(timedelta(days=1,hours=2,minutes=10))     
1 day, 2:10:00
>>> print(timedelta(days=1,hours=2,minutes=10) + timedelta(weeks=1))
8 days, 2:10:00

>>> print(timedelta(minutes=10) // timedelta(minutes=3))
3	#得到一个int数值
>>> print(timedelta(minutes=10) / timedelta(minutes=3))
3.3333333333333335		#得到一个float数值

>>> print(timedelta(minutes=10) % timedelta(minutes=3))
0:01:00		#得到一个datetime.timedelta的值
>>> print(timedelta(minutes=10) *3 )
0:30:00		#得到一个datetime.timedelta的值

#repr() 函数将对象转化为供解释器读取的形式。
>>> print(repr(timedelta(days=1)))		     
datetime.timedelta(days=1)
>>> print(repr(timedelta(hours=1)))		     
datetime.timedelta(seconds=3600)
>>> print(repr(timedelta(minutes=10)))		     
datetime.timedelta(seconds=600)

#计算秒数
>>> print(datetime.timedelta(days=1).total_seconds())		     
86400.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值