Python datetime模块详解:日期时间处理与格式化指南

Cora
Cora
发布时间:2026-10-14| 4人浏览过
原创

本文详细介绍Python中datetime模块的核心用法,涵盖date、time、datetime及timedelta类的构造与操作。解析常用类方法如today()、now()、fromtimestamp(),并深入讲解strftime()格式字符串的具体含义与应用示例,帮助开发者高效处理时间数据。

Python datetime模块概述

Python内置了多个用于处理日期和时间的模块,包括calendar、time和datetime。其中,time模块的接口设计与C标准库time.h基本一致,此前已有文章介绍。相比之下,datetime模块的接口设计更加直观且易于调用,本文将重点讲解该模块的使用方法。

datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别代表该模块能表示的最小和最大年份。MINYEAR的值为1,MAXYEAR的值为9999。对于绝大多数应用场景,这一范围已完全足够。

datetime模块主要定义了以下五个类:

  • datetime.date:用于表示日期的类,常用属性包括year(年)、month(月)和day(日)。
  • datetime.time:用于表示时间的类,常用属性包括hour(时)、minute(分)、second(秒)和microsecond(微秒)。
  • datetime.datetime:用于同时表示日期和时间的类。
  • datetime.timedelta:用于表示两个时间点之间的时间间隔(即长度)。
  • datetime.tzinfo:用于处理时区相关信息(此处不作深入讨论,感兴趣者可参考Python官方手册)。

注意:上述所有类型的对象均为不可变(immutable)对象,即创建后其属性值无法直接修改。

接下来将详细介绍这些类的具体使用方式。

date类详解

date类

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 Calendar,一种类似中国农历但西方常用的日历系统)时间转换为date对象(此处不展开讨论)。

使用示例如下:


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())
 
# # ---- 结果 ----
# date.max: 9999-12-31
# date.min: 0001-01-01
# date.today(): 2010-04-06
# date.fromtimestamp(): 2010-04-06

date类提供的实例方法和属性包括:

  • date.year、date.month、date.day:分别获取年、月、日。
  • date.replace(year, month, day):生成一个新的日期对象,使用参数指定的年、月、日替换原有对象的对应属性(原对象保持不变)。
  • date.timetuple():返回与日期对应的time.struct_time对象。
  • date.toordinal():返回日期对应的格里高利历天数。
  • date.weekday():返回星期几,星期一返回0,星期二返回1,依此类推。
  • data.isoweekday():返回星期几,星期一返回1,星期二返回2,依此类推。
  • date.isocalendar():返回格式为(year, month, day)的元组。
  • date.isoformat():返回格式为'YYYY-MM-DD'的字符串。
  • date.strftime(fmt):根据自定义格式字符串进行格式化,下文将详细讲解。

使用示例如下:


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: 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

与date类似,time类也支持重载某些操作,允许对时间进行如下处理:

  • date2 = date1 + timedelta:日期加上一个时间间隔,返回一个新的日期对象(timedelta将在下文介绍,表示时间间隔)。
  • date2 = date1 - timedelta:日期减去一个时间间隔,返回一个新的日期对象。
  • timedelta = date1 - date2:两个日期相减,返回一个表示时间间隔的对象。
  • date1 < date2:比较两个日期的大小。

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

使用示例如下:


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
 
# # ---- 结果 ----
# now: 2010-04-06 tomorrow: 2010-04-07
# timedelta: 1 day, 0:00:00
# 2010-04-07
# True

time类详解

Time类

time类表示时间,由时、分、秒及微秒组成。其构造函数定义如下:

class datetime.time(hour[, minute[, second[, microsecond[, tzinfo]]]])。各参数含义不再赘述,需留意参数tzinfo,它表示时区信息。各参数取值范围如下:hour范围为[0, 24),minute范围为[0, 60),second范围为[0, 60),microsecond范围为[0, 1000000)。

time类定义的类属性包括:

  • time.min和time.max:time类所能表示的最小和最大时间。其中,time.min = time(0, 0, 0, 0),time.max = time(23, 59, 59, 999999)。
  • time.resolution:时间的最小单位,此处为1微秒。

time类提供的实例方法和属性包括:

  • 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):返回自定义格式化字符串,下文将详细介绍。

使用示例如下:


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

与date类似,两个time对象也可以进行比较或相减返回时间间隔对象,此处不再提供示例。

datetime类详解

datetime类

datetime类是date与time的结合体,包含两者的所有信息。其构造函数如下:datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]),各参数含义与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对象(UTC时间)。
  • datetime.combine(date, time):根据date和time对象,创建一个datetime对象。
  • datetime.strptime(date_string, format):将格式字符串转换为datetime对象。

使用示例如下:


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

datetime类提供的实例方法与属性(许多属性或方法在date和time中已出现过,此处仅罗列方法名,具体含义可参考上文对date与time类的讲解):

  • 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对象也可以进行比较、相减返回时间间隔对象,或日期时间加上一个间隔返回新的日期时间对象。此处不提供详细示例,读者可自行尝试。

strftime格式字符串详解

格式字符串

datetime、date、time均提供了strftime()方法,该方法接收一个格式字符串,输出日期时间的字符串表示。下表内容源自Python手册,经简单翻译整理(如有口误请见谅):

格式字符及其意义如下:

%a:星期的简写,如星期三为Wed。 %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:时区名称(如果是本地时间,返回空字符串)。 %%:字面量%,即%%输出为%。

使用示例如下:


dt = datetime.now()
print '(%Y-%m-%d %H:%M:%S %f): ', dt.strftime('%Y-%m-%d %H:%M:%S %f')
print '(%Y-%m-%d %H:%M:%S %p): ', dt.strftime('%y-%m-%d %I:%M:%S %p')
print '%%a: %s ' % dt.strftime('%a')
print '%%A: %s ' % dt.strftime('%A')
print '%%b: %s ' % dt.strftime('%b')
print '%%B: %s ' % dt.strftime('%B')
print '日期时间%%c: %s ' % dt.strftime('%c')
print '日期%%x:%s ' % dt.strftime('%x')
print '时间%%X:%s ' % dt.strftime('%X')
print '今天是这周的第%s天 ' % dt.strftime('%w')
print '今天是今年的第%s天 ' % dt.strftime('%j')
print '今周是今年的第%s周 ' % dt.strftime('%U')
 
# # ---- 结果 ----
# (%Y-%m-%d %H:%M:%S %f): 2010-04-07 10:52:18 937000
# (%Y-%m-%d %H:%M:%S %p): 10-04-07 10:52:18 AM
# %a: Wed 
# %A: Wednesday 
# %b: Apr 
# %B: April 
# 日期时间%c: 04/07/10 10:52:18 
# 日期%x:04/07/10 
# 时间%X:10:52:18 
# 今天是这周的第3天 
# 今天是今年的第097天 
# 今周是今年的第14周

本文关于Python datetime处理时间的总结到此结束,更多相关Python datetime内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。