日期时间模块
datetime
包含用于处理日期和时间的函数和类。
Date 类
日期值用date
类表示。实例具有属性year
,month
和 day
。使用today()
类方法可以轻松创建当前日期。
date
类表示一个日期(由年、月、日组成),其原型如下:
class datetime.date(year, month, day)
参数说明:
year
的范围是[MINYEAR, MAXYEAR]
,即[1, 9999]
;month
的范围是[1, 12]
。(月份是从1开始的,不是从0开始);day
的最大值根据给定的year
,month
参数来决定。例如闰年2月份有29天;
date 类对象定义了一些常用的类方法与类属性:
date.max
、date.min
:date
对象所能表示的最大、最小日期;date.resolution
:date
对象表示日期的最小单位。这里是天。date.today()
:返回一个表示当前本地日期的date
对象;date.fromtimestamp(timestamp)
:根据给定的时间戮,返回一个date
对象;datetime.fromordinal(ordinal)
:将Gregorian
日历时间转换为date
对象;(Gregorian Calendar:一种日历表示方法,类似于我国的农历,西方国家使用比较多)
使用示例:
>>> datetime.date.max
datetime.date(9999, 12, 31)
>>> datetime.date.min
datetime.date(1, 1, 1)
>>> datetime.date.resolution
datetime.timedelta(1)
>>> datetime.date.today()
datetime.date(2016, 5, 12)
>>> datetime.date.fromtimestamp(time.time())
datetime.date(2016, 5, 12)
常用方法和属性
date.year
、date.month
、date.day
:年、月、日;date.replace(year, month, day)
:生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)date.timetuple()
:返回日期对应的time.struct_time
对象;date.toordinal()
:返回日期对应的Gregorian Calendar日期;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)
:自定义格式化字符串。
使用示例:
>>> import datetime
>>> today = datetime.date.today()
>>> today.year
2023
>>> today.month
11
>>> today.day
14
>>> today.weekday()
1
>>> today.isoweekday()
2
>>> today.isoformat()
'2023-11-14'
>>> today.strftime("%Y-%m-%d")
'2023-11-14'
Time 类
time
类表示时间(由时、分、秒以及微秒组成),其原型如下:
class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
参数说明:
hour
的范围为[0, 24)
,minute
的范围为[0, 60)
,second
的范围为[0, 60)
,microsecond
的范围为[0, 1000000)
,tzinfo
表示时区信息。
time
类定义的类属性:
time.min
、time.max
:time 类所能表示的最小、最大时间。其中,
time.min = time(0, 0, 0, 0)
,time.max = time(23, 59, 59, 999999)
;time.resolution
:时间的最小单位,这里是 1 微秒;使用示例:
python>>> datetime.time.min datetime.time(0, 0) >>> datetime.time.max datetime.time(23, 59, 59, 999999) >>> datetime.time.resolution datetime.timedelta(0, 0, 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)
:返回自定义格式化字符串。
使用示例:
>>> tm = datetime.time(18, 18, 18)
>>> tm.hour
18
>>> tm.minute
18
>>> tm.second
18
>>> tm.microsecond
0
>>> tm.tzinfo
>>> tm.isoformat()
'18:18:18'
>>> tm.replace(hour=20)
datetime.time(20, 18, 18)
>>> tm.strftime("%I:%M:%S %p")
'06:18:18 PM'
time
类的对象只能进行比较,无法进行加减操作。
datetime 类
datetime
是 date
与 time
的结合体,包括 date
与 time
的所有信息。其原型如下:
class datetime.datetime(
year, month, day,
hour=0, minute=0, second=0, microsecond=0, tzinfo=None
)
各参数的含义与 date
、time
的构造函数中的一样,要注意参数值的范围。
datetime
类定义的类属性与方法:
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
对象,data
与time
类没有提供该方法。
使用示例:
>>> import datetime
>>> datetime.datetime.min
datetime.datetime(1, 1, 1, 0, 0)
>>> datetime.datetime.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
>>> datetime.datetime.resolution
datetime.timedelta(microseconds=1)
>>> print(datetime.datetime.resolution)
0:00:00.000001
获取当前的时间
>>> today = datetime.datetime.today()
>>> today
datetime.datetime(2023, 5, 8, 15, 53, 20, 719496)
>>> datetime.datetime.now()
datetime.datetime(2023, 5, 8, 15, 53, 31, 554708)
>>> datetime.datetime.utcnow()
datetime.datetime(2023, 5, 8, 7, 53, 36, 259756)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2023, 5, 8, 15, 53, 49, 574983)
方法与属性
datetime
类提供的实例方法与属性大部分功能与 date
和 time
类似,这里仅罗列方法名不再赘述:
datetime.year
、month
、day
、hour
、minute
、second
、microsecond
、tzinfo
:datetime.date()
:获取date对象;datetime.time()
:获取time对象;datetime.ctime()
:返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()))
;datetime.strftime(format)
datetime
对象同样可以进行比较,或者相减返回一个时间间隔对象,或者日期时间加上一个间隔返回一个新的日期时间对象。
合并 data 与 time
datetime
实例具有 date
和 time
对象的所有属性。
与datetime
一样,date
为创建新实例提供了方便的类方法。
import datetime
t = datetime.time(1, 2, 3)
print('t :', t) # t : 01:02:03
d = datetime.date.today()
print('d :', d) # d : 2018-03-18
dt = datetime.datetime.combine(d, t)
print('dt:', dt) # dt: 2018-03-18 01:02:03
combine()
从一个 date
和一个time
实例创建datetime
实例。
字符串格式化和解析
datetime 对象的默认字符串表示形式使用 ISO-8601 格式(YYYY-MM-DDTHH:MM:SS.mmmmmm
)。可以使用 strftime()
对其进行格式化。
import datetime
ft = "%Y %m %d %H:%M:%S %Y"
today = datetime.datetime.today()
print('默认ISO :', today) # ISO : 2018-03-18 16:20:34.941204
s = today.strftime(ft)
print('字符串格式化:', s) # strftime: Sun Mar 18 16:20:34 2018
每个日期时间格式代码仍必须以前缀为前缀%
,后续冒号将作为文字字符处理,以包含在输出中。
符号 | 含义 | 例 |
---|---|---|
%a | 缩写的工作日名称 | 'Wed' |
%A | 完整的工作日名称 | 'Wednesday' |
%w | 工作日编号 - 0(星期日)至6(星期六) | '3' |
%d | 每月的一天(零填充) | '13' |
%b | 缩写的月份名称 | 'Jan' |
%B | 全月名称 | 'January' |
%m | 一年中的一个月 | '01' |
%y | 没有世纪的一年 | '16' |
%Y | 与世纪的一年 | '2016' |
%H | 24小时制的小时 | '17' |
%I | 12小时制的小时 | '05' |
%p | 上午下午 | 'PM' |
%M | 分钟 | '00' |
%S | 秒 | '00' |
%f | 微秒 | '000000' |
%z | 时区感知对象的UTC偏移量 | '-0500' |
%Z | 时区名称 | 'EST' |
%j | 一年中的某一天 | '013' |
%W | 一年中的一周 | '02' |
%c | 当前区域设置的日期和时间表示形式 | 'Wed Jan 13 17:00:00 2016' |
%x | 当前区域设置的日期表示形式 | '01/13/16' |
%X | 当前区域设置的时间表示 | '17:00:00' |
%% | 文字% 字符 | '%' |
时间戳互转
>>> import datetime
>>> today = datetime.datetime.today()
>>> today.timestamp()
1670482659.845911
>>> datetime.datetime.fromtimestamp(1670482659)
datetime.datetime(2022, 12, 8, 14, 57, 39)
timedelta 类
datetime.timedelta
对象代表两个时间之间的的时间差,两个 date
或 datetime
对象相减时可以返回一个 timedelta
对象。其原型如下:
class datetime.timedelta(
days=0, seconds=0, microseconds=0,
milliseconds=0, minutes=0, hours=0, weeks=0
)
所有参数可选,且默认都是 0,参数的值可以是整数,浮点数,正数或负数。
内部只存储 days
,seconds
,microseconds
,其他参数的值会自动按如下规则抓转换:
- 1 millisecond(毫秒) 转换成 1000 microseconds(微秒)
- 1 minute 转换成 60 seconds
- 1 hour 转换成 3600 seconds
- 1 week 转换成 7 days
b = a + datetime.timedelta(hours=5)
c = a + datetime.timedelta(weeks=1)
日期计算
date 重载了简单的运算符
# datetime 允许对日期进行加减和比较:
# 日期加上一个间隔,返回一个新的日期对象
datetime2 = datetime1 + timedelta
# 日期隔去间隔,返回一个新的日期对象
datetime2 = datetime1 - timedelta
# 两个日期相减,返回一个时间间隔对象
timedelta = datetime1 - datetime2
# 两个日期进行比较
datetime1 < datetime2
使用示例:
>>> import datetime
>>> now = datetime.datetime.today()
>>> now
datetime.datetime(2023, 10, 21, 14, 35, 59, 60648)
>>> datetime.datetime.resolution
datetime.timedelta(microseconds=1)
>>> now += datetime.datetime.resolution
>>> now
datetime.datetime(2023, 10, 21, 14, 35, 59, 60649)
>>> now -= datetime.datetime.resolution
>>> now
datetime.datetime(2023, 10, 21, 14, 35, 59, 60648)
datetime.date(2016, 5, 13)
>>> now -= datetime.datetime.resolution
>>> now
datetime.date(2016, 5, 12)
>>> now < datetime.datetime.max
True
日期和时间比较
可以使用标准比较运算符比较日期和时间值,以确定哪个更早或更晚。
import datetime
import time
print('Times:')
t1 = datetime.time(12, 55, 0)
print(' t1:', t1)
t2 = datetime.time(13, 5, 0)
print(' t2:', t2)
print(' t1 < t2:', t1 < t2)
print('Dates:')
d1 = datetime.date.today()
print(' d1:', d1)
d2 = datetime.date.today() + datetime.timedelta(days=1)
print(' d2:', d2)
print(' d1 > d2:', d1 > d2)
支持所有比较运算符。
案例:日期计算
日期计算使用标准算术运算符。
例:计算新中国诞生了多少天。
import datetime
today = datetime.date.today()
print('Today :', today) # Today : 2018-03-18
birth_day = datetime.date(1949, 10, 10)
diff = today - birth_day
print("新中国诞生了 %s 日" % diff.days)
one_day = datetime.timedelta(days=1)
print('一天时间 :', one_day) # 一天时间 : 1 day, 0:00:00
yesterday = today - one_day
print('昨天:', yesterday) # 昨天: 2018-03-17
tomorrow = today + one_day
print('明天 :', tomorrow) # 明天 : 2018-03-19
print('明天 - 昨天:', tomorrow - yesterday) # 2 days, 0:00:00
print('昨天 - 明天:', yesterday - tomorrow) # -2 days, 0:00:00
示例说明了使用timedelta
对象计算新日期,可以减去日期实例以生成 timedeltas
(包括负 delta
值)。
timedelta
对象还支持与整数,浮点数和其他timedelta
对象进行算术运算。