时间模块详解

Python中的时间模块

In [175]:
import datetime
from datetime import date
In [176]:
d = datetime.datetime.today()      # 获取当前日期和时间
print(type(d), ' : ', d)
date = d.date()                    # 获取当前日期
print(type(date), ' : ', date)
time = d.time()                    # 获取当前时间
print(type(time), ' : ', time)
print("现在是 {}".format(d.isoformat()), '备注:日期和时间之间有一个"T"')
print("现在是 {}".format(d.date().isoformat()), "{}".format(d.time().isoformat()))
<class 'datetime.datetime'>  :  2018-08-21 23:55:59.318226
<class 'datetime.date'>  :  2018-08-21
<class 'datetime.time'>  :  23:55:59.318226
现在是 2018-08-21T23:55:59.318226 备注:日期和时间之间有一个"T"
现在是 2018-08-21 23:55:59.318226
In [184]:
print(type(d.timestamp()), ' : ', d.timestamp()) # 返回时间戳。时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。使用数字签名技术产生的数据,签名的对象包括了原始文件信息、签名参数、签名时间等信息。广泛的运用在知识产权保护、合同签字、金融帐务、电子报价投标、股票交易等方面。
i = 1534865279.522101
date = datetime.date.fromtimestamp(i)            # 将时间戳转换为日期形式
print(type(date), ' : ', date)
<class 'float'>  :  1534866959.318226
<class 'datetime.date'>  :  2018-08-21
In [178]:
print(type(d.year), ' : ', d.year)          # 返回date对象的年
print(type(d.month), ' : ', d.month)         # 返回date对象的月
print(type(d.day), ' : ', d.day)           # 返回date对象的日
print(type(d.weekday()), ' : ', d.weekday())     # 返回weekday,如果是星期一,返回0,如果是星期2,返回1,以此类推
<class 'int'>  :  2018
<class 'int'>  :  8
<class 'int'>  :  21
<class 'int'>  :  1
In [179]:
print(type(d.isoweekday()), ' : ', d.isoweekday())   # 返回weekday,如果是星期一,返回1,如果是星期2,返回2,以此类推
print(type(d.isocalendar()), ' : ', d.isocalendar(), ', 即返回值是:', d.isocalendar()[0],'年第', d.isocalendar()[1], '周的周', d.isocalendar()[2], '.') # 返回年, 周数, 周几(year, week, weekday)(weekday == isoweekday)
print(type(d.isoformat()), ' : ', d.isoformat())     # 返回格式如'YYYY-MM-DD' 的字符串
<class 'int'>  :  2
<class 'tuple'>  :  (2018, 34, 2) , 即返回值是: 2018 年第 34 周的周 2 .
<class 'str'>  :  2018-08-21T23:55:59.318226
In [185]:
print(type(d.max), ' : ', d.max)           # date对象所能表示的最大日期
print(type(d.min), ' : ', d.min)           # date对象所能表示的最小日期
print(type(d.resolution), ' : ', d.resolution)    # date对象表示日期的最小单位, 是一个时间差类
<class 'datetime.datetime'>  :  9999-12-31 23:59:59.999999
<class 'datetime.datetime'>  :  0001-01-01 00:00:00
<class 'datetime.timedelta'>  :  0:00:00.000001
In [186]:
import datetime
print(type(d.toordinal()), ' : ', d.toordinal())                            # 返回日期对应的Gregorian Calendar日期(在公历日历中的序数), Gregorian Calendar :一种日历表示方法,类似于我国的农历
print(type(datetime.date(1, 1, 1).toordinal()), ' : ', datetime.date(1, 1, 1).toordinal())       # 这种日历的第一天, 即0001年1月1日为第一天
print(type(datetime.date(9999, 12, 31).toordinal()), ' : ', datetime.date(9999, 12, 31).toordinal())  # 最后一天. 西方人这样设计真是欠考虑, 到时候一定又会出现万年虫的!!! :)

i=736927
date = datetime.date.fromordinal(i)             # 将Gregorian Calendar日期转换回date形式
print(type(date), ' : ', date)
<class 'int'>  :  736927
<class 'int'>  :  1
<class 'int'>  :  3652059
<class 'datetime.date'>  :  2018-08-21
In [195]:
print(d)
print(type(d.timetuple()), ' : ', d.timetuple())           # 返回日期对应的time.struct_time对象
"""
日期类型d 转为 time.struct_time(
                       tm_year=2017
                     , tm_mon=2
                     , tm_mday=12
                     , tm_hour=0
                     , tm_min=0
                     , tm_sec=0
                     , tm_wday=6
                     , tm_yday=43
                     , tm_isdst=-1
                 )
"""
print(type(d.timetuple().tm_year), ' : ', d.timetuple().tm_year)    # 获取年份
print(type(d.timetuple().tm_mon), ' : ', d.timetuple().tm_mon)      # 获取月份
print(type(d.timetuple().tm_mday), ' : ', d.timetuple().tm_mday)    # 获取日期
print(type(d.timetuple().tm_hour), ' : ', d.timetuple().tm_hour)    # 获取小时
print(type(d.timetuple().tm_min), ' : ', d.timetuple().tm_min)      # 获取分钟
print(type(d.timetuple().tm_sec), ' : ', d.timetuple().tm_sec)      # 获取秒钟
print(type(d.timetuple().tm_wday), ' : ', d.timetuple().tm_wday)    # 获取在一周中的weekday, 0到6 (0是周一)
print(type(d.timetuple().tm_yday), ' : ', d.timetuple().tm_yday)    # 获取在一年中的第几天
print(type(d.timetuple().tm_isdst), ' : ', d.timetuple().tm_isdst)  # 获取-1, 0, 1, -1是决定是否为夏令时
2018-08-21 23:55:59.318226
<class 'time.struct_time'>  :  time.struct_time(tm_year=2018, tm_mon=8, tm_mday=21, tm_hour=23, tm_min=55, tm_sec=59, tm_wday=1, tm_yday=233, tm_isdst=-1)
<class 'int'>  :  2018
<class 'int'>  :  8
<class 'int'>  :  21
<class 'int'>  :  23
<class 'int'>  :  55
<class 'int'>  :  59
<class 'int'>  :  1
<class 'int'>  :  233
<class 'int'>  :  -1
In [189]:
print(type(d.strftime('%m-%d-%y %H:%M:%S')), ' : ', d.strftime('%m-%d-%y %H:%M:%S'))  # 自定义格式化字符串
print(type(d.ctime()), ' : ', d.ctime())  # 自定义格式化字符串
<class 'str'>  :  08-21-18 23:55:59
<class 'str'>  :  Tue Aug 21 23:55:59 2018
In [183]:
time_delta1 = datetime.date(2018, 8, 20) - datetime.date(2018, 8, 18)
print(type(time_delta1), ' : ', time_delta1)
time_delta2 = datetime.timedelta(seconds=60, minutes=59, hours=23)     # 时间间隔
print(type(time_delta2), ' : ' , time_delta2)
datetime_pre = d + time_delta2                 # 时间差(提前或推迟)
print(type(d), ' : ' , d)
print(type(datetime_pre), ' : ' , datetime_pre)
<class 'datetime.timedelta'>  :  2 days, 0:00:00
<class 'datetime.timedelta'>  :  1 day, 0:00:00
<class 'datetime.datetime'>  :  2018-08-21 23:55:59.318226
<class 'datetime.datetime'>  :  2018-08-22 23:55:59.318226
In [200]:
import calendar
cal = calendar.month(2018, 8)
print(type(cal))
print("2018年8月份日历")
print(cal)
<class 'str'>
2018年8月份日历
    August 2018
Mo Tu We Th Fr Sa Su
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

◎ 欢迎参与讨论,请在这里发表您的看法、交流您的观点。