Python 内建包-datetime

1 datetime

datetime 模块定义了几个类:

  • datetime.date :表示日期的类, 常用的属性有 year, month, day
  • datetime.time :表示时间的类, 常用的属性有 hour, minute, second, microsecond
  • datetime.datetime :表示日期时间
  • datetime.timedelta :表示时间间隔, 即两个时间点之间的长度
  • datetime.tzinfo :与时区有关的相关信息

1.1 date 类

date 类表示一个日期。日期由年、月、日组成。构造函数为 class datetime.date(year, month, day)

  • year : 范围 [MINYEAR, MAXYEAR], 即 [1, 9999]
  • month : 范围 [1, 12]
  • day : 最大值由 year, month 参数来确定, 如闰年2月份有29天

常用方法和属性 :

  • date.year、date.month、date.day : 年、月、日
  • date.max、date.min :date 对象所能表示的最大、最小日期
  • date.resolution :date 对象表示日期的最小单位, 这里是天
  • date.today() :返回一个表示当前本地日期的 date 对象
  • date.replace(year, month, day) : 生成一个新的日期对象, 用参数指定的年, 月, 日代替原有对象中的属性.(原有对象仍保持不变)
  • date.timetuple() : 返回日期对应的 time.struct_time 对象
  • date.weekday() : 返回 weekday, 如果是星期一, 返回0如果是星期2, 返回1, 以此类推
  • data.isoweekday() : 返回 weekday, 如果是星期一, 返回1如果是星期2, 返回2, 以此类推
  • date.isocalendar() : 返回格式如(year, month, day)的元组
  • date.isoformat() : 返回格式如’YYYY-MM-DD’的字符串
  • date.strftime(fmt) : 自定义格式化字符串.在下面详细讲解.
  • date.fromtimestamp(timestamp) :根据给定的时间戮, 返回一个 date 对象
  • date.toordinal() : 返回日期对应的 Gregorian Calendar 日期
  • datetime.fromordinal(ordinal) :将 Gregorian 日历时间转换为date对象(Gregoria Calendar:一种日历表示方法)

date 类还对某些操作进行了重载,它允许对日期加减和比较操作:

  • date2 = date1 + timedelta : 日期加上一个间隔,返回一个新的日期对象
  • date2 = date1 - timedelta : 日期隔去间隔,返回一个新的日期对象
  • timedelta = date1 - date2 : 两个日期相减,返回一个时间间隔对象
  • date1 < date2 : 两个日期进行比较
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
32
33
34
35
36
37
38
39
40
41
42
from datetime import *  
import time

print 'date.max:', date.max
print 'date.min:', date.min
print 'date.today():', date.today()
print 'date.fromtimestamp():', date.fromtimestamp(time.time())

now = date(2010, 04, 06)
tomorrow = now.replace(day = 07)
print 'now:', now, ', tomorrow:', tomorrow
print 'timetuple():', now.timetuple()
print 'weekday():', now.weekday()
print 'isoweekday():', now.isoweekday()
print 'isocalendar():', now.isocalendar()
print 'isoformat():', now.isoformat()

now = date.today()
tomorrow = now.replace(day = 7)
delta = tomorrow - now
print 'now:', now, ' tomorrow:', tomorrow
print 'timedelta:', delta
print now + delta
print tomorrow > now

# # ---- 结果 ----
# date.max: 9999-12-31
# date.min: 0001-01-01
# date.today(): 2010-04-06
# date.fromtimestamp(): 2010-04-06

# now: 2010-04-06 , tomorrow: 2010-04-07
# timetuple(): (2010, 4, 6, 0, 0, 0, 1, 96, -1)
# weekday(): 1
# isoweekday(): 2
# isocalendar(): (2010, 14, 2)
# isoformat(): 2010-04-06

# now: 2010-04-06 tomorrow: 2010-04-07
# timedelta: 1 day, 0:00:00
# 2010-04-07
# True

1.2 Time类

time 类表示时间,由时、分、秒以及微秒组成。构造函数为 class datetime.time(hour[, minute[, second[, microsecond[, tzinfo]]]]), tzinfo 表示时区信息

  • hour : 范围 [0, 24)
  • minute : 范围 [0, 60)
  • second : 范围 [0, 60)
  • microsecond : 范围 [0, 1000000)

常用方法和属性 :

  • time.min、time.max : time 类所能表示的最小、最大时间, 即 [time(0, 0, 0, 0), time(23, 59, 59, 999999)]
  • time.resolution : 时间的最小单位, 这里是1微秒
  • time.hour、time.minute、time.second、time.microsecond : 时、分、秒、微秒
  • time.tzinfo : 时区信息
  • time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]) : 创建一个新的时间对象, 用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变)
  • time.isoformat() : 返回型如”HH:MM:SS”格式的字符串表示
  • time.strftime(fmt) : 返回自定义格式化字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from datetime import *  
tm = time(23, 46, 10)
print 'tm:', tm
print 'hour: %d, minute: %d, second: %d, microsecond: %d' /
% (tm.hour, tm.minute, tm.second, tm.microsecond)
tm1 = tm.replace(hour = 20)
print 'tm1:', tm1
print 'isoformat():', tm.isoformat()

# # ---- 结果 ----
# tm: 23:46:10
# hour: 23, minute: 46, second: 10, microsecond: 0
# tm1: 20:46:10
# isoformat(): 23:46:10

1.3 datetime类

datetimedatetime 的结合体,包括 datetime 的所有信息。构造函数为 datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]) 各参数的含义与 date,time 一样,要注意参数值的范围

常用方法和属性 :

  • datetime.min、datetime.max : datetime 所能表示的最小值与最大值
  • datetime.resolution : datetime 最小单位
  • datetime.today() : 返回一个表示当前本地时间的 datetime 对象
  • datetime.now([tz]) : 返回一个表示当前本地时间的 datetime 对象, 如果提供了参数 tz, 则获取 tz 参数所指时区的本地时间
  • datetime.utcnow() : 返回一个当前 utc 时间的 datetime 对象
  • datetime.fromtimestamp(timestamp[, tz]) : 根据时间戮创建一个 datetime 对象, 参数 tz 指定时区信息
  • datetime.utcfromtimestamp(timestamp) : 根据时间戮创建一个 datetime 对象
  • datetime.combine(date, time) : 根据 date 和 time, 创建一个 datetime 对象
  • datetime.strptime(date_string, format) : 将格式字符串转换为 datetime 对象
  • datetime.year、month、day、hour、minute、second、microsecond、tzinfo :
  • datetime.date() :获取date对象
  • datetime.time() :获取time对象
  • datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
  • datetime.timetuple()
  • datetime.utctimetuple()
  • datetime.toordinal()
  • datetime.weekday()
  • datetime.isocalendar()
  • datetime.isoformat([sep])
  • datetime.ctime() : 返回一个日期时间的C格式字符串, 等效于time.ctime(time.mktime(dt.timetuple()))
  • datetime.strftime(format)

像 date 一样,也可以对两个 datetime 对象进行比较,或者相减返回一个时间间隔对象,或者日期时间加上一个间隔返回一个新的日期时间对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from datetime import *  
import time

print 'datetime.max:', datetime.max
print 'datetime.min:', datetime.min
print 'datetime.resolution:', datetime.resolution
print 'today():', datetime.today()
print 'now():', datetime.now()
print 'utcnow():', datetime.utcnow()
print 'fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time())
print 'utcfromtimestamp(tmstmp):', datetime.utcfromtimestamp(time.time())

# ---- 结果 ----
# datetime.max: 9999-12-31 23:59:59.999999
# datetime.min: 0001-01-01 00:00:00
# datetime.resolution: 0:00:00.000001
# today(): 2010-04-07 09:48:16.234000
# now(): 2010-04-07 09:48:16.234000
# utcnow(): 2010-04-07 01:48:16.234000 # 中国位于+8时间,与本地时间相差8
# fromtimestamp(tmstmp): 2010-04-07 09:48:16.234000
# utcfromtimestamp(tmstmp): 2010-04-07 01:48:16.234000

1.4 格式字符串

datetime, date, time 都提供了 strftime() 方法,该方法接收一个格式字符串,输出日期时间的字符串表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
%a: 星期的简写。如 星期三为Web
%A: 星期的全写。如 星期三为Wednesday
%b: 月份的简写。如4月份为Apr
%B: 月份的全写。如4月份为April
%c: 日期时间的字符串表示。(如: 04/07/10 10:43:39)
%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],为什么不是[00, 59],参考python手册~_~)
%U: 周在当年的周数当年的第几周),星期天作为周的第一天
%w: 今天在这周的天数,范围为[0, 6],6表示星期天
%W: 周在当年的周数(是当年的第几周),星期一作为周的第一天
%x: 日期字符串(如:04/07/10)
%X: 时间字符串(如:10:43:39)
%y: 2个数字表示的年份
%Y: 4个数字表示的年份
%z: 与utc时间的间隔 (如果是本地时间,返回空字符串)
%Z: 时区名称(如果是本地时间,返回空字符串)
%%: %% => %