Python 日期和时间 —— datetime

Python提供了多个内置模块用于操作日期时间,如calendar,time,datetime。calendar用于处理日历相关 ;time提供的接口与C标准库time.h基本一致;而其中应用最广的即datetime,相比于time模块,datetime模块的接口则更直观、更容易调用。本文将会对datetime进行学习。

datetime 模块为日期和时间处理提供了多种方法。支持方法的同时,还可格式化输出。此外,该模块还支持时区的处理。

datetime 库

可见包含四大类,date表示日期(年月日);datetime(年月日时分秒...)继承 date;time表示时间(时分秒...);timedelta 表示时间差;tzinfo 表示时区信息(本章暂不做介绍)。

datetime.date

date 即日期,类的构成为 (年, 月,日),对应的 year、month、day 均为date类的属性(type 为 int)。

year的范围是[MINYEAR, MAXYEAR],即[1, 9999];
month的范围是[1, 12]。(月份是从1开始的,不是从0开始的);
day的最大值根据给定的year, month参数来决定。例如闰年2月份有29天,非闰年28天; 若超范围,会报错

today() 返回当日; weekday() 返回当前星期数,若星期一,返回0、若星期2,返回1,以此类推; isoweekday() 若星期一,返回1、若星期2,返回2,以此类推;

isoformat() 返回日期以ISO格式,即 'YYYY-MM-DD’的字符串; strftime(...) 方法可自定义日期表示法(time和datetime也均可使用),该方法会在博文之后详细说明。

date.replace(year/month/day) :生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)

一些其他的方法请参考文档,上述方法示例代码如下:

datetime.time

time 即时间,类的构成为 (时, 分, 秒, 微秒, 时区 信息),微妙、时区信息可缺省。

time类提供的实例方法和属性:time.hour、time.minute、time.second、time.microsecond:时、分、秒、微秒; time.tzinfo:时区信息(暂不介绍);

其中 time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999);time.resolution:时间的最小单位,这里是1微秒;

isoformat() 返回时间以ISO格式,即 "HH:MM:SS" 的字符串; strftime(...) 方法也可自定义时间表示法,该方法会在博文之后详细说明。

time.replace( [ hour [ , minute [ , second [ , microsecond [ , tzinfo ] ] ] ] ] ) 生成一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变);

一些其他的方法请参考文档,上述方法示例代码 如下:

datetime.datetime

datetime是date与time的结合体,包括date与time的所有信息(常用的时间处理就用datetime)。

它的构造函数如下: datetime. datetime (year, month, day [ , hour [ , minute [ , second [ , microsecond [ , tzinfo ] ] ] ] ] ),各参数的含义与date、time的构造函数中的一样,要注意参数值的范围。

datetime类定义的类属性与方法:

datetime.today() :返回一个表示当前本地时间的datetime对象;
datetime.now([tz]) :返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
datetime.utcnow() :返回一个当前utc时间的datetime对象;
datetime.fromtimestamp(timestamp[, tz]) :根据时间戮创建一个datetime对象,参数tz指定时区信息;
datetime.date() :获取date对象; datetime.time() :获取time对象;
datetime. replace ([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ] ] ]) : 用法同date和time方法;
datetime.combine(date, time) :根据date和time,创建一个datetime对象;
datetime.strptime(date_string, format) :将格式字符串转换为datetime对象;同样该方法会在博文之后详细说明。

time 模块本文不介绍,但需要了解一个比较重要的概念,即时间戳

time () -> floating point number
Return the current time in seconds since the Epoch.
Fractions of a second may be present if the system clock provides them.

Unix time, POSIX time 或 Unix timestamp 是从Epoch(1970年1月1日00:00:00 UTC)开始所经过的秒数,不考虑闰秒。相关的详细了解请 Google。

import time
timestamp = time.time()
print timestamp

上述 datetime 的方法示例如下:

datetime.timedelta

即表示一个时间的差值:

具体参考文档,这边就不多加阐述了:

timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

All arguments are optional and default to 0. Arguments may be ints, longs, or floats, and may be positive or negative.


Only days, seconds and microseconds are stored internally. Arguments are converted to those units:

  • A millisecond is converted to 1000 microseconds.
  • A minute is converted to 60 seconds.
  • An hour is converted to 3600 seconds.
  • A week is converted to 7 days.
  • and days, seconds and microseconds are then normalized so that the representation is unique, with

  • 0 <= microseconds < 1000000
  • 0 <= seconds < 3600*24 (the number of seconds in one day)
  • -999999999 <= days <= 999999999
  • 主要是对date、time、datetime 一些 timedelta 操作的支持,如下:

    date 对某些操作进行了重载,它允许我们对日期进行如下一些操作:
    date2 = date1 + timedelta  # 日期加上一个间隔,返回一个新的日期对象(timedelta将在下面介绍,表示时间间隔)
    date2 = date1 - timedelta   # 日期隔去间隔,返回一个新的日期对象
    timedelta = date1 - date2   # 两个日期相减,返回一个时间间隔对象
    date1 < date2         # 两个日期可进行比较

    注: 对日期进行操作时,要防止日期超出它所能表示的范围。

    time 和 datetime 的操作与 date 雷同,这里就不提供例子了。

    时间的格式化

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

    参考示例如下: