Python datetime模块详解:时间格式化、时区处理与日期运算
本文详细介绍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时间格式化相关内容,建议搜索本站历史文章或继续阅读后续文章,感谢支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













