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天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
5天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
32 5
|
4天前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
8 0
|
5天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
8 0
|
5天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
10 0
|
30天前
|
开发者 Python
Python 时间处理与时区转换:深入探究 datetime、time 模块与 pytz 库的功能与应用
Python 时间处理与时区转换:深入探究 datetime、time 模块与 pytz 库的功能与应用
12 0
|
机器学习/深度学习 测试技术 Python
Python date,datetime,time等相关操作总结
Python date,datetime,time等相关操作总结
122 0
|
Python
Python 3,一行代码处理各种时间转换,从此跟datetime,time模块说拜拜 ~ ~ 不收藏算我输!!!
Python 3,一行代码处理各种时间转换,从此跟datetime,time模块说拜拜 ~ ~ 不收藏算我输!!!
373 1
Python 3,一行代码处理各种时间转换,从此跟datetime,time模块说拜拜 ~ ~ 不收藏算我输!!!
python中的时间处理模块(二):datetime模块之time类详解
python中的时间处理模块(二):datetime模块之time类详解
python中的时间处理模块(二):datetime模块之time类详解
|
Unix Python
第25天:Python datetime 和 time
第25天:Python datetime 和 time
122 0