Python datetime模块详解:时间格式化、时区处理与日期运算

Mason
Mason
发布时间:2026-10-12| 3人浏览过
原创

本文详细介绍Python中datetime模块的核心用法,涵盖date、time、datetime及timedelta类的特性。内容包含时间戳与字符串的双向转换、指定格式输出、获取当前日期、计算时间间隔及日期比较等实用操作,帮助开发者高效处理时间相关逻辑。

1、时间戳转换为指定格式日期

import time
t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(t)
timestamp = time.time()
tuple_time = time.localtime(timestamp)
print(tuple_time)
print(time.strftime("%Y-%m-%d %H:%M:%S", tuple_time))

2、将字符串的时间转换为时间戳

import time
import datetime
time_str = "2023-02-19 23:07:21"
time_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
print(time_struct)
print(time.mktime(time_struct))
print(int(time.mktime(time_struct)))

3、Datetime详细介绍

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

datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别代表datetime模块所能表示的最小和最大年份。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月份,day的最大值为29。

date类提供了一些常用的类方法与类属性,便于日常操作:

  • date.max、date.min:分别表示date对象所能表示的最大和最小日期;
  • date.resolution:表示date对象所代表日期的最小单位,此处为天;
  • date.today():返回一个表示当前本地日期的date对象;
  • date.fromtimestamp(timestamp):根据给定的时间戳,返回一个对应的date对象;
  • datetime.fromordinal(ordinal):将格里高利历(Gregorian Calendar,一种类似于中国农历但主要在西方国家使用的日历系统)的序数转换为date对象(此处不展开讨论)。

4、获得三天前的时间的方法

import time
import datetime
time_str = "2023-02-19 23:07:21"
time_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
print(datetime.datetime.now())
computed_time = datetime.datetime.now() - datetime.timedelta(days=3)
print(computed_time)
timestamp = time.mktime(computed_time.timetuple())
print(timestamp)
time_str = time.strftime("%Y-%m-%d %H:%M:%S", computed_time.timetuple())
print(time_str)

5、使用datetime模块来获取当前的日期和时间

import time
import datetime
time_str = "2023-02-19 23:07:21"
time_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
currentDate = datetime.datetime.now()
print(time.strftime("%Y-%m-%d %H:%M:%S", currentDate.timetuple()))
print(currentDate.year)
print(currentDate.month)
print(currentDate.day)
print(currentDate.hour)
print(currentDate.minute)
print(currentDate.second)

date类提供的实例方法和属性如下:

  • date.year、date.month、date.day:分别获取年、月、日;
  • date.replace(year, month, day):生成一个新的日期对象,使用参数指定的年、月、日替换原有对象中的对应属性(原有对象保持不变);
  • date.timetuple():返回与日期对应的time.struct_time对象;
  • date.toordinal():返回日期对应的格里高利历序数;
  • date.weekday():返回星期几,星期一返回0,星期二返回1,依此类推;
  • date.isoweekday():返回星期几,星期一返回1,星期二返回2,依此类推;
  • date.isocalendar():返回格式为(year, month, day)的元组;
  • date.isoformat():返回格式为'YYYY-MM-DD'的字符串;
  • date.strftime(fmt):自定义格式化字符串,具体用法将在下文详细讲解。
import time
from datetime import datetime, date
time_str = "2023-02-19 23:07:21"
time_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
now = date(2023, 1, 18)
print(time.strftime("%Y-%m-%d %H:%M:%S", now.timetuple()))
print(now.weekday())
print(now.isoformat())

date类还对部分操作进行了重载,支持以下日期运算:

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

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

import time
from datetime import datetime, date, timedelta
time_str = "2023-02-19 23:07:21"
time_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
currentDate = date.today()
print(time.strftime("%Y-%m-%d %H:%M:%S", currentDate.timetuple()))
time_delta = currentDate - timedelta(days=1)
print(time.strftime("%Y-%m-%d %H:%M:%S", time_delta.timetuple()))
print(currentDate > time_delta)
print(currentDate - time_delta)
print(time_delta + timedelta(days=3))

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对象也可以进行比较、相减(返回时间间隔对象),或者加上一个时间间隔(返回新的日期时间对象)。

至此,关于Python datetime模块的时间格式化和时区处理详解已介绍完毕。如需了解更多Python时间格式化相关内容,建议搜索本站历史文章或继续阅读后续文章,感谢支持!

相关标签:

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

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 算法库。