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

相关文章
|
14天前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
33 8
|
11天前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 &quot;hello world!&quot; 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
21 4
|
2月前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
138 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
3月前
|
Python
Python Internet 模块
Python Internet 模块。
140 74
|
4月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
153 63
|
2月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
40 3
|
2月前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
60 0
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
3月前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
238 5
|
5月前
|
开发者 Python
Python 时间处理与时区转换:深入探究 datetime、time 模块与 pytz 库的功能与应用
Python 时间处理与时区转换:深入探究 datetime、time 模块与 pytz 库的功能与应用
39 0
|
Python
Python 3,一行代码处理各种时间转换,从此跟datetime,time模块说拜拜 ~ ~ 不收藏算我输!!!
Python 3,一行代码处理各种时间转换,从此跟datetime,time模块说拜拜 ~ ~ 不收藏算我输!!!
399 1
Python 3,一行代码处理各种时间转换,从此跟datetime,time模块说拜拜 ~ ~ 不收藏算我输!!!

热门文章

最新文章