前言
本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。
根据模块知识,一次讲解单个或者多个模块的内容。
教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html
日期和时间
日期和时间的处理,可以说是很常见的业务了,覆盖各种产品的方方面面。
datetime
datetime模块是Python的标准库模块之一。这个模块提供了丰富且强大的功能来处理日期和时间,包括日期(date)、时间(time)、日期时间组合(datetime)、时间间隔(timedelta)以及时区信息(timezone)等类,支持日期和时间的创建、格式化、计算和比较等操作。
date
这个类只处理日期,不包含时间部分。
常用函数
- 构造函数。我们可以根据年月日直接创建一个任意日期的对象。
from datetime import date
# 创建一个日期
birthday= date(1996, 10, 3)
print("明月望秋思的生日是:",birthday)
- today函数。获取今天的日期。
today = date.today()
print(“今天是:”, today)
- 成员属性:获取年月日信息
# 获取成员属性
year, month, day = birthday.year, birthday.month, birthday.day
print(f"出生年份: {year}, 月份: {month}, 日: {day}")
- birthday.strftime格式化日期
# 格式化日期
formatted_birthday = birthday.strftime("%Y年%m月%d日")
print("格式化后的生日:", formatted_birthday)
- 比较日期大小
直接大于小于等于符号比较,特别方便。
# 比较日期大小
before_date = date(1996, 10, 1)
if birthday < before_date:
print("生日在之前或同一天")
else:
print("生日在之后")
after_date = date(1996, 10, 8)
if birthday < before_date:
print("生日在之后或同一天")
else:
print("生日在之前")
equal_date = date(1996, 10, 3)
if birthday == before_date:
print("生日在同一天")
else:
print("生日在之前或之后")
- 计算偏移日期
from datetime import date, timedelta
one_week_later = today+ timedelta(weeks=1)
print("一周后是:", one_week_later)
- 计算日期差值
another_date = date(2024, 7, 3)
delta = another_date - today
print("两日期间相差天数:", delta.days)
正好和日期偏移的对上。
ps: Java的日期差值就没办法这么一减就完事了。。。
- 特定日期属性
weekday = today.isoweekday() # Monday is 1 and Sunday is 7
print(“今天是这周的第”, weekday, “天”)
day_of_year = birthday.toordinal() - date(birthday.year, 1, 1).toordinal() + 1
print(“生日是一年中的第”, day_of_year, “天”)
这些函数,基本上能满足常见日期的业务要求,不能直接完成的也可以通过这些函数简介完成,无非就是循环组合使用。
time
time类用于表示一天中的时间(小时、分钟、秒、微秒),不包含任何日期信息。它主要用于处理时间的小时、分钟、秒和微秒部分。
- 构造函数: 指定时间创建对象。注意如果你不填入参数,创建出的时间是00:00:00
from datetime import time
# 12点34分56秒
t = time(12, 34, 56)
print(t)
- 成员属性:获取时分秒信息
t = time(12, 34, 56, 78)
hour, minute, second, microsecond = t.hour, t.minute, t.second, t.microsecond
print(f"小时: {hour}, 分钟: {minute}, 秒: {second}, 微秒: {microsecond}")
- 时间比较
也是大于小于等于比较就行,这里就只写一个小于的
t1 = time(14, 0)
t2 = time(15, 30)
if t1 < t2:
print("t1在t2之前")
else:
print("t1在t2之后或相同")
date类和time只能单独表示日期或单独表示时间,但是我们常见都是日期时间一起操作和使用,所以还有一个datetime。
datetime
datetime类是处理日期和时间最常用的类,它结合了date和time的功能,可以表示具体的日期和时间,包括年、月、日、时、分、秒和微秒,并支持时区。
- 获取当前日期和时间
from datetime import datetime
now = datetime.now()
print("当前日期和时间:", now)
通常在需要保存或者需要确定当前时间的时候使用。
- 指定日期和时间创建对象
dt = datetime(2024, 6, 26, 22, 0, 0)
print("指定日期时间:", dt)
- 成员属性:获取日期时间中的年月日时分秒等信息
year, month, day = dt.year, dt.month, dt.day
hour, minute, second, microsecond = dt.hour, dt.minute, dt.second, dt.microsecond
print(f"年: {year}, 月: {month}, 日: {day}, 时: {hour}, 分: {minute}, 秒: {second}, 微秒: {microsecond}")
- 格式化输出
formatted_dt = dt.strftime("%Y-%m-%d %H:%M:%S")
print("格式化日期时间:", formatted_dt)
- 日期偏移
其实在date中用过,不过这里多了时间,但是时间是不会变得
one_day_later = dt + timedelta(days=1)
print("一天后:", one_day_later)
- 计算差值
date中也用过,不过由于时间的存在,从时间开始计算差值。
another_dt = datetime(2024, 6, 27, 16, 0, 0)
delta = another_dt - dt
print(“时间差:”, delta)
大家计算一下,是不是正好查18个小时。
- 时区处理:datetime可以处理带时区的日期时间
utc_plus_8 = timezone(timedelta(hours=8))
dt_with_timezone = datetime.now(utc_plus_8)
print("带有时区的日期时间:", dt_with_timezone)
# 时区转换
utc_dt = dt_with_timezone.astimezone(timezone.utc)
print("转换到UTC时间:", utc_dt)
有些应用的默认时区不一定是东八区,就会导致我们获取到的日期时间不对,这个时候我们就可以转换时区。
- 特定日期属性
weekday = dt.isoweekday()
print("星期几:", weekday)
day_of_year = dt.timetuple().tm_yday
print("一年中的第几天:", day_of_year)
- 时间戳转换
可以使得日期时间和时间戳互相转换。有很多时候我们需要日期时间,给的是时间戳。或者我们有日期时间但是需要提供给时间戳。常见的就是接口请求,参数是时间戳,我们只有日期时间。业务处理中获取到接口请求时间给的是时间戳我们要转成日期时间。
timestamp = dt.timestamp()
print("时间戳:", timestamp)
from_timestamp = datetime.fromtimestamp(timestamp)
print("从时间戳转换回来的日期时间:", from_timestamp)
结尾
时间日期的相关功能是经常需要用到,因为日期时间的处理处处可见。不能跳过,要自己敲一遍。
作业
- 使用date类
- 使用time类
- 使用datetime类
- 使用timedelta类(中间有用到没有单独记)