Python内置时间模块:Datetime实例详解(一)

简介: Python内置时间模块:Datetime实例详解(一)

Python内置时间模块:Datetime
1.1 前言
在用Python进行数据处理,尤其是时间序列梳理的处理,经常会涉及处理时间或日期的地方。今天我对Python内置的时间模块来进行整理。

Python内置时间处理模块主要包括:
    § Datetime
    § Time
    § Calendar
概括来说,时间和日期处理的模块和库,有几个主要的概念都是会涉及的,包括:
日期、时间、时间戳、时间和字符串的转换,时区等。
Datetiem、Time、Calendar这三个模块中,用的较多的是Datetime,针对Datetime模块,从构建时间对象实例、时间转换、时间对象的运算三个方面进行梳理。

image.png

针对Time模块,从时间获取和时间转换两个方面进行梳理,涉及6个知识点。

image.png

首先要介绍的,是我们平时用的比较多的datetime模块,它属于Python内置模块,功能相对较全。

1.2 构建时间对象实例

import datetime
# from datetime import date, datetime, time, timedelta, tzinfo
import time
时间实例的构造包括日期(如2022年3月21日),时间(如20点10分01秒),或者是包含date和time点datetime(2022321201001秒),如下是具体构造过程。

1.2.1 日期(date)实例的构造

date是一个理想化的简单型日期,属性有year, month,day。
# 构造日期date实例,指定year,month,day参数的方式
d1 = datetime.date(2022, 0o03, 22) # 0o03是八进制表示方式代表03,否则报错
print(d1)
d2 = datetime.date(2022, 3, 22))  # 也可以直接写3
print(d2)
2022-03-22
2022-03-22
除了上面的构造方式,还可以通过date.today()来构造当天的日期。
Today = datetime.date.today()
print(f'今天日期是:{Today}')
today = Today
今天日期是:2022-03-21
date类型的日期,可以通过.year, .month, .day来获取日期所属的年份,月份和具体的日期号,这几个方法经常在数据分析中用到。
print(f'日期所属的年份为: {today.year}年')
print(f'日期所属的月份为:{today.month}月')
print(f'日期具体的日期号为:{today.day}号')
日期所属的年份为: 2022年
日期所属的月份为:3月
日期具体的日期号为:21

1.2.2 时间time实例的构造

time是一个独立于任何特定日期的理想化时间,其属性有hour, minute, second,microsecond和tzinfo。
# 构造时间time 实例
import datetime
t1 = datetime.time(12, 32, 0o01) # 用八进制0o前缀
print(t1)
12:32:01
# 获取时间的时 .hour,分.minute,秒.second
print(f'time 所属的小时为:{t1.hour}')
print(f'time 所属的分钟为:{t1.minute}')
print(f'time 所属的秒为:{t1.second}')
time 所属的小时为:12
time 所属的分钟为:32
time 所属的秒为:1

1.2.3 datetime实例的构造

datetime是date和time的结合,其属性有year,month,day,hour,minute,second,microsecond和tzinfo。
import datetime
# 构造时间datetime实例
dt1 = datetime.datetime(2022, 0o3, 22, 12, 43, 2)
print(dt1)
2022-03-22 12:43:02
除了上面的构造方式,在datetime实例化的时候,还有其他的一些方式,包括使用datetime.now()和datetime.today()以及在date的基础上使用combine方法等。
# 使用datetime.now()
dt2 = datetime.datetime.now()
print(dt2)

# datetime.today()
dt3 = datetime.datetime.today()
print(dt3)

# 使用combine方法
d1 = datetime.date.today()
t1 = datetime.time(12, 32, 0o01) #
dt4 = datetime.datetime.combine(d1, t1)
print(dt4)
2022-03-21 19:28:56.951677
2022-03-21 19:28:56.951699
2022-03-21 12:32:01
通过datetime实例化,是我们使用时间经常用到的方法,在日常使用过程中,我们可能只需要具体到某天,或者只需要具体到某天的某个时间点,这时候,也可以通过datetime的一些方法来实现。
# 从datetime来获取日期
day1 = dt4.date()
day2 = datetime.date(2022, 0o03, 22) # 指定日期
print(f'获取的日期为{day1}, {day2}')

# 从datetime来获取具体的时间点
time1 = dt4.time()
print(f'获取的时间点:{time1}\n')
获取的日期为2022-03-21, 2022-03-22
获取的时间点:12:32:01
同样的datetime类型的时间,可以通过.year, .month,.day来获取日期所属的年份,月份和具体的日期号。
year = dt4.year
month= dt4.month
day = dt4.day

print(f'日期所属的年份为:{year}')
print(f'日期所属的月份为:{month}')
print(f'日期所属的日期号为:{day}\n')
日期所属的年份为:2022
日期所属的月份为:3
日期所属的日期号为:21
还有一个可能涉及到的时间是获取某天属于星期几,可以通过weekday()和isoweekday()方法来实现。
# 从datetime来获取日期是星期几
# 使用weekday方法
# 数字从0开始,0代表星期一,1代表星期二,以此类推
dt5 = datetime.date.today()
weekday = dt5.weekday()
print(f'今天日期的\'weekday\'为:{weekday}')
今天日期的'weekday':0
# 定义个转换列表
week_list = [0,'星期一', 1,'星期二', 2,'星期三', 3,'星期四', 4,'星期五', 5,'星期六', 6,'星期日']
# 此例用到推导式,得到一个列表
weekday = [week_list[i+1] for i in range(len(week_list)) if week_list[i] == weekday]

print(f'今天是{weekday[0]}')
# 从datetime 来获取日期是星期几
# 使用isoweekday方法
# 数字从1开始,1代表星期一,2代表星期二,以此类推

isoweekday = dt5.isoweekday()
print(f'\n今天日期的\'isoweekday\'为:{isoweekday}')
今天是星期一

今天日期的'isoweekday':1

如果datetime的值由于某种原因弄错了,可以通过replace()方法更正。replace方法的参数如下:

datetime.replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second,
microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
# 修改年份
dt6 = dt5.replace(year = 2021)
print(f'年份修改之后:{dt6}')

# 修改年月日
dt7 = dt5.replace(2021, 10, 0o01)
print(f'年月日修改之后:{dt7}')
年份修改之后:2021-03-21
年月日修改之后:2021-10-01

1.2.4 timedelta对象的构造

timedelta对象表示两个date或者time或者datetime的时间间隔。
class datetime.timedelta(day=0, seconds=0, microseconds=0, millseconds=0, minutes=0, hours=0, weeks=0)
所有参数都是可选的并且默认为0。这些参数可以说hi整数或者浮点数,也可以是正数或者负数。
只有days,seconds和microseconds会存储在内部。参数单位的换算规则如下:

      1. 1毫秒会转换成1000微妙
     2. 1分钟会转换成603. 1小时会转换成36004. 1星期会转换成7
import datetime

delta = datetime.timedelta(weeks=3,
                           days=10,
                           hours=6,
                           minutes=50,
                           seconds=30,
                           microseconds=1000,
                           milliseconds=10000,
                           )
print(delta)
print(datetime.timedelta(days=31, seconds=24640, microseconds=1000))
print(24640//3600, 24640%3600//60)
31 days, 6:50:40.001000
31 days, 6:50:40.001000
6 50

1.2.5 tzinfo介绍

datetime.tzinfo返回datetime对象的时区,前提是在创建datetime对象是需传入tzinfo参数,如果没有传入则返回值为None。
# 如果没有pytz库,则需要自行安装
# 此案例在Windows环境下可以正常运行

import pytz, datetime

sh = pytz.timezone('Asia/Shanghai')
d_tz = datetime.datetime(2022, 0o03, 22, hour=15, tzinfo=sh)

print(d_tz.tzinfo)
<DstTzInfo 'Asia/Shanghai' LMT+15:06:00 STD>

接下文 Python内置时间模块:Datetime实例详解(二)https://developer.aliyun.com/article/1618144

相关文章
|
2月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
417 7
|
2月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
293 0
|
2月前
|
JSON 算法 API
Python中的json模块:从基础到进阶的实用指南
本文深入解析Python内置json模块的使用,涵盖序列化与反序列化核心函数、参数配置、中文处理、自定义对象转换及异常处理,并介绍性能优化与第三方库扩展,助你高效实现JSON数据交互。(238字)
417 4
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
333 0
|
2月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
230 0
|
Python 人工智能 数据可视化
Python模块与包(八)
Python模块与包(八)
165 0
Python模块与包(八)
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
576 159
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
447 159
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。

推荐镜像

更多