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

相关文章
|
4月前
|
算法 Python
Apriori算法的Python实例演示
经过运行,你会看到一些集合出现,每个集合的支持度也会给出。这些集合就是你想要的,经常一起被购买的商品组合。不要忘记,`min_support`参数将决定频繁项集的数量和大小,你可以根据自己的需要进行更改。
163 18
|
5月前
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
220 14
|
6月前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
78 8
|
6月前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 &quot;hello world!&quot; 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
99 5
|
7月前
|
Python API 监控
将Python CLI工具发布为pip模块的完整指南
注册PyPI账户 访问PyPI官网注册账户 推荐使用双因素认证增强安全性 生成API令牌 访问PyPI账户管理 生成具有"Upload packages"权限的令牌,妥善保存 确保模块名唯一性 在PyPI搜索页面验证模块名未被使用 建议使用小写字母和连字符的组合(如my-cli-tool)
140 9
|
8月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
99 3
|
C++ Python
54 python - 类属性、实例属性
54 python - 类属性、实例属性
127 0
|
Python
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
138 0
|
Python
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
249 0
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
|
Python
【Python零基础入门篇 · 15】:面向对象基础(类和对象)、类属性和实例属性的访问、构造函数
【Python零基础入门篇 · 15】:面向对象基础(类和对象)、类属性和实例属性的访问、构造函数
183 0
【Python零基础入门篇 · 15】:面向对象基础(类和对象)、类属性和实例属性的访问、构造函数

热门文章

最新文章

推荐镜像

更多