Python3.x datetime模块

1、时间间隔(timedelta)

  指定时间长度之间计算差值

#!/usr/bin/env python
__author__ = 'realtiger'

"""
@version: 3.5.1
@author: realtiger
"""

from datetime import timedelta

a=timedelta(days=3,hours=5)
b=timedelta(hours=23.6)
c = a + b
# 最终计算结果
print(c)
# 结果中有几天(向下取整,如果你奇怪时分秒消失的话)
print(c.days)
# 结果中有多少毫秒
print(c.microseconds)
# 结果中有多少秒
print(c.seconds)
# 结果中全部换算为秒,总共有多少秒
print(c.total_seconds())
# 查看最终结果的类型
print(type(c))
# timedelta类型最大时间
print(timedelta.max)
# timedelta类型最小时间
print(timedelta.min)
# timedelta类型的精度
print(timedelta.resolution)

  运行结果为:

4 days, 4:36:00
4
0
16560
362160.0
<class 'datetime.timedelta'>
999999999 days, 23:59:59.999999
-999999999 days, 0:00:00
0:00:00.000001

  当时,时间的差也是没有问题的。分钟、小时可以通过计算获得。

 2、日期表示(date)

  date由年月日组成,年的范围是[1,9999],月的范围是[1,12],日的范围根据年月来确定参数。

#!/usr/bin/env python
__author__ = 'realtiger'

"""
@version: 3.5.1
@author: realtiger 
"""

from datetime import date
import time
# date对象的最大时间
print(date.max)
# date对象的最小时间
print(date.min)
# date对象的精度,单位为天
print(date.resolution)
# 返回当前本地时间
print(date.today())
# 根据给定时间戳,返回date对象
print(date.fromtimestamp(time.time()))

  运行结果为:

9999-12-31
0001-01-01
1 day, 0:00:00
2016-12-28
2016-12-28

  date还提供了一些其他的实例和属性。

#!/usr/bin/env python
__author__ = 'realtiger'

"""
@version: 3.5.1
@author: realtiger 
"""

from datetime import date
import time

# 构造新的date类
new=date(2016,11,12)
# 打印当前类
print(new)
# date类中的年月日单独输出
print(new.year)
print(new.month)
print(new.day)
# 使用新的年月日替换原来的年月日属性(原属性不变)
print(new.replace(month=8))
# 确认原属性没有变化
print(new)
# 返回日期对应的time.struct_time对象
print(new.timetuple())
# 返回日期对应的Gregorian Calendar日期
print(new.toordinal())
# 返回weekday,周一是0,周二是1,以此类推
print(new.weekday())
# 同上面,区别是从1开始,周一是1,周二是2,以此类推
print(new.isoweekday())
# 返回年月日的元组
print(new.isocalendar())
# 返回格式为'YYYY-MM-DD’的字符串
print(new.isoformat())
# 自定义返回格式
print(new.strftime('%Y-%m-%d %H:%M:%S'))

  运行结果为:

2016-11-12
2016
11
12
2016-08-12
2016-11-12
time.struct_time(tm_year=2016, tm_mon=11, tm_mday=12, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=317, tm_isdst=-1)
736280
5
6
(2016, 45, 6)
2016-11-12
2016-11-12 00:00:00

  同时date类也可以进行运算

#!/usr/bin/env python
__author__ = 'realtiger'

"""
@version: 3.5.1
@author: realtiger
"""

from datetime import date, timedelta

# 构造一个新的date类
new = date(2016, 11, 12)
# 可以与一个时间间隔进行相加
new = new+timedelta(days=2, hours=5, minutes=30, seconds=59)
print(new.strftime('%Y-%m-%d %H:%M:%S'))
# 也可以与时间间隔相减
new = new-timedelta(days=2, hours=5, minutes=30, seconds=59)
print(new.strftime('%Y-%m-%d %H:%M:%S'))
# 进行时间的判断
print(new > date(2016, 12, 13))
print(new < date(2016, 12, 13))
# 两个date类相减,得到一个时间间隔类型
new = new - date(2016, 12, 13)
print(new)
print(type(new))

  运行结果是:

2016-11-14 00:00:00
2016-11-12 00:00:00
False
True
-31 days, 0:00:00
<class 'datetime.timedelta'>

  可以看到,和时间间隔相加减的时候并没有加减时分秒,因为date类的进度是天。

 3、时间表示(time)

  time类表示时间,由时、分、秒、微秒以及时区组成。时的范围为[0, 23],分的范围为[0, 59],秒的范围为[0, 59],microsecond的范围为[0, 999999]

#!/usr/bin/env python
__author__ = 'realtiger'

"""
@version: 3.5.1
@author: realtiger
"""

from datetime import time

# time类的最大时间
print(time.max)
# time类的最小时间
print(time.min)
# time类的精度
print(time.resolution)
# 构造一个新的time类
tm=time(hour=22,minute=21,second=6)
print(tm)
# 返回新time类的时分秒以及毫秒
print(tm.hour)
print(tm.minute)
print(tm.second)
print(tm.microsecond)
# 使用新属性替换原属性(原属性不变)
print(tm.replace(hour=2,minute=6))
print(tm)
# 返回形式为"HH:MM:SS"格式的字符串
print(tm.isoformat())
# 自定义返回字符串
print(tm.strftime('%H-%M-%S'))

  运行结果是:

23:59:59.999999
00:00:00
0:00:00.000001
22:21:06
22
21
6
0
02:06:06
22:21:06
22:21:06
22-21-06

4、datetime类

  datetime类就是date类和time类的结合,包含date类和time类的所有信息。

 

#!/usr/bin/env python
__author__ = 'realtiger'

"""
@version: 3.5.1
@author: realtiger
"""

from datetime import datetime
import time

# datetime的最大时间,最小时间,精度
print(datetime.max)
print(datetime.min)
print(datetime.resolution)
# 返回本地时间
print(datetime.today())
# 返回现在的时间,可以传入时区参数
print(datetime.now())
# 返回一个当前utc的时间
print(datetime.utcnow())
# 根据时间戮创建一个datetime对象,可以传入时区
print(datetime.fromtimestamp(time.time()))
# 根据时间戮创建一个datetime对象
print(datetime.utcfromtimestamp(time.time()))
# 将格式字符串转换为datetime对象
print(datetime.strptime("2016-12-31 19:25:3", "%Y-%m-%d %H:%M:%S"))
print(type(datetime.strptime("2016-12-31 19:25:3", "%Y-%m-%d %H:%M:%S")))
# 传入date对象和time对象构造一个datetime对象
# print(datetime.combine(date(year=2017,month=5,day=1),time(20,30,58)))
# 构造一个datetime对象
dt=datetime(2016, 12, 31, 19, 35, 15)
# 返回年月日时分秒微妙
print(dt.year)
print(dt.month)
print(dt.day)
print(dt.hour)
print(dt.minute)
print(dt.second)
print(dt.microsecond)
# 返回date对象
print(dt.date())
# 返回time对象
print(dt.time())
# 替换datetime属性,原属性不变
print(dt.replace(year=2199,month=8,second=48))
# 返回日期对应的time.struct_time对象
print(dt.timetuple())
# 返回日期对应的time.struct_time对象
print(dt.utctimetuple())
# 返回日期对应的Gregorian Calendar日期
print(dt.toordinal())
# 返回weekday,从0开始
print(dt.weekday())
# 返回weekday,从1开始
print(dt.isoweekday())
# 返回年月日元组
print(dt.isocalendar())
# 返回格式化输出
print(dt.isoformat())
# 返回一个日期时间的C格式字符串
print(dt.ctime())
# 返回自定义格式化时间
print(dt.strftime('%Y-%m-%d %H:%M:%S'))

  运行结果是:

9999-12-31 23:59:59.999999
0001-01-01 00:00:00
0:00:00.000001
2016-11-12 14:46:57.769252
2016-11-12 14:46:57.769251
2016-11-12 06:46:57.769251
2016-11-12 14:46:57.769252
2016-11-12 06:46:57.769252
2016-12-31 19:25:03
<class 'datetime.datetime'>
2016
12
31
19
35
15
0
2016-12-31
19:35:15
2199-08-31 19:35:48
time.struct_time(tm_year=2016, tm_mon=12, tm_mday=31, tm_hour=19, tm_min=35, tm_sec=15, tm_wday=5, tm_yday=366, tm_isdst=-1)
time.struct_time(tm_year=2016, tm_mon=12, tm_mday=31, tm_hour=19, tm_min=35, tm_sec=15, tm_wday=5, tm_yday=366, tm_isdst=0)
736329
5
6
(2016, 52, 6)
2016-12-31T19:35:15
Sat Dec 31 19:35:15 2016
2016-12-31 19:35:15

  同样的,datetime也可以进行比较以及相减运算

5、格式化字符串

    以下是python手册中的格式化字符串的一些关键符号。

  格式字符      意义

  %a        英语星期的简写。如星期一为Mon
  %A        英语星期的全写。如星期一为Monday
  %b        英语月份的简写。如四月份为Apr
  %B        英语月份的全写。如四月份为April
  %c        datetime的字符串表示。(如:16/09/08 11:32:35)
  %d        当前时间是这个月中的第几天
  %f        微秒(范围[0,999999])
  %H        24小时制小时,范围是[0, 23]
  %I        12小时制小时,范围是[0, 11]
  %j        当前时间是当年中的第几天,范围是[001,366]
  %m        月份,范围是[01,12]
  %M        分钟,范围是[00,59]
  %p        上下午标志(AM或者PM)
  %S        秒,范围为[00,61]
  %U        当前时间是当年中的第几周,星期天为每周的第一天
  %w        当前时间是当周中的第几天,范围是[0, 6],6表示星期天
  %W        当前时间是当年中的第几周,星期一为每周的第一天
  %x        日期字符串(如:16/11/12)
  %X        时间字符串(如:19:35:15)
  %y        两个数字表示的年份
  %Y        四个数字表示的年份
  %z        与utc时间的间隔 (如果是本地时间,返回空字符串)
  %Z        时区名称(如果是本地时间,返回空字符串)
  %%        %% => %

posted @ 2017-03-28 15:29  cos1eqlg0  阅读(420)  评论(0编辑  收藏  举报