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

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

接上文 Python内置时间模块:Datetime实例详解(一)https://developer.aliyun.com/article/1618146?

1.3 时间转换
时间的三种存在方式:时间对象,时间字符串,时间戳。

时间对象,比如date、datetime、time对象等;时间字符串,如:"2022-03-20";时间戳,如time.time()返回的就是时间戳。
在数据处理过程中,经常会遇到需要将不同形式的时间进行转换。下面介绍常用的方法:

1.3.1 时间对象转字符串

时间对象转换成字符串,可以通过isoformat或strftime方法来实现。
strftime的英文全称str format time,根据给定的格式将时间对象转换为字符串
import datetime
# 将date时间对象转为字符串
d1 = datetime.date(2022, 0o03, 20)
print(f'转换字符串之前的类型为:{type(d1)}\n')
print(f'转为的字符串日期为:{d1}\n类型为{type(d1.isoformat())}\n')
转换字符串之前的类型为:<class 'datetime.date'>

转为的字符串日期为:2022-03-20 类型为<class 'str'>
# 用strftime来转换
# YYYY-MM-DD 形式
d2 = d1.strftime('%Y-%m-%d')
2022-03-20
# MM DD, YYYY形式
d2 = d1.strftime('%b %d, %Y')
print(d2)
Mar 20, 2022
# 将time 时间对象转换为字符串
t1 = datetime.time(16, 59, 30)
t2 = t1.strftime('%H:%M:%S')
print(t2)
16:59:30
# 将datetime时间对象转为字符串
dt2 = datetime.datetime.now()
dt3 = dt2.strftime('%Y-%m-%d %H:%M:%S')
print('\n'+f'现在日期和时间的字符串形式为:{dt3}')
现在日期和时间的字符串形式为:2022-03-21 20:04:56
dt4 = dt2.isoformat()
print(dt4)
2022-03-21T20:04:56.818553

Python中常见的时间日期格式化符号:

image.png

1.3.2 字符串转时间对象

字符串转时间对象,用的是strptime方法,与strftime方法刚相反。
strptime的英文全称是str parse time,将字符串解析为给定相应的时间对象。
#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :3/21/22 10:38 AM
# 文件      :字符串转时间对象.py
# IDE      :PyCharm

import datetime
s1 = '2022-03-21'
d = datetime.datetime.strptime(s1, '%Y-%m-%d')
print(d)
2022-03-21 00:00:00

下面提供了strftime方法与strptime方法的比较:

image.png

需要注意的是,strftime方法可供date,time和datetime对象使用,而strptime方法仅供datetime对象使用。

1.3.3 时间戳转换时间对象

时间戳是指格林威治时间19700101000000秒(北京时间19700101080000秒)起至现在的总秒数。
#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :3/21/22 12:06 PM
# 文件      :时间戳转换为时间对象.py
# IDE      :PyCharm

import datetime
import time
# 获取当前的时间戳
ts_1 = time.time()
print(f'今天的时间戳为:{ts_1}')
今天的时间戳为:1647866330.826814
# 获取当天00:00:00的时间戳
ts_2 = int(time.time()/86400)*86400
print(f'今天00:00:00的时间戳{ts_2}')
今天00:00:00的时间戳1647820800

获取当天23:59:59的时间戳

一天有246060 = 86400

ts_3 = int(time.time()/86400)*86400+86400-1
print(f'今天23:59:59的时间戳:{ts_3}')

今天23:59:59的时间戳:1647907199
# 将时间戳转换为时间对象
print(f'当前时间的时间戳转为时间对象为:{datetime.datetime.fromtimestamp(ts_1)}')
当前时间的时间戳转为时间对象为:2022-03-21 20:38:50.826814
# 将时间戳转换为时间对象
print(f'当前时间戳转为当前日期对象:{datetime.date.fromtimestamp(ts_1)}')

print(datetime.date(2022, 0o03, 21))
当前时间戳转为当前日期对象:2022-03-21
2022-03-21

1.3.4 将时间对象转为时间戳

时间戳是指格林威治时间19700101000000秒(北京时间19700101080000秒)起至现在的总秒数。
因此,将时间对象转换为时间戳时,直接计算两个时间对象的timedelta,并将timedelta以"秒"来表示就可以了。
#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :3/21/22 4:05 PM
# 文件      :将时间对象转为时间戳.py
# IDE      :PyCharm
import datetime

dt1 = datetime.datetime(2022, 0o03, 21, 16, 0o12, 1) # 0o12八进制代表十进制数10
# 注意这里要用北京时间
dt_s = datetime.datetime(1970, 1, 1, 8, 0)
timedelta_1 = dt1 - dt_s
# 返回时间间隔包含了多少秒
timedelta_s = timedelta_1.total_seconds()
print(f'返回时间间隔了{timedelta_s}秒')
print(f'时间间隔了{int(timedelta_s/86400/365)}年!')
返回时间间隔了1647850201.0秒
时间间隔了52年!
这里我们来反推一下,看我们将时间对象转换为时间戳,是否正确
将时间戳转为时间对象
print(datetime.datetime.fromtimestamp(timedelta_s))

print(datetime.datetime(2022, 0o03, 21, 16, 37, 1))
2022-03-21 16:10:01
2022-03-21 16:37:01

1.4 时间对象的运算
1.4.1 获取当天最小时间和最大时间

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :3/21/22 4:40 PM
# 文件      :获取当天最小时间和最大时间.py
# IDE      :PyCharm
# 获取当天最小时间
import datetime

# datetime.time.min 当天的最小时间就是000000
# datetime.date.today()取当天日期
min_time= datetime.datetime.combine(datetime.date.today(), datetime.time.min)
print(f'当天最小时间为:{min_time}')
当天最小时间为:2022-03-21 00:00:00
# 获取当天最大时间
max_time = datetime.datetime.combine(datetime.date.today(), datetime.time.max)
print(f'当天最大时间为:{max_time}')
当天最大时间为:2022-03-21 23:59:59.999999

1.4.2 获取当前日期的前几天/后几天

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :3/21/22 5:21 PM
# 文件      :9.4.2获取当前日期的前几天后几天.py
# IDE      :PyCharm
import datetime

# 获取明天
tomorrow = datetime.date.today() + datetime.timedelta(days=1)
today = datetime.date.today()
print(f'今天是:{today}---明天是:{tomorrow}')
今天是:2022-03-21---明天是:2022-03-22
after_days = int(input('请输入今天之后的天数:'))
after_day = datetime.date.today() + datetime.timedelta(days=after_days)
print(f'{after_days}天之后的今天是{after_day}')
请输入今天之后的天数:3
3天之后的今天是2022-03-24

获取前天

the_day_before_yesterday = datetime.date.today() - datetime.timedelta(days=2)
print(f'\n今天是:{today}--前天是{the_day_before_yesterday}')
今天是:2022-03-21--前天是2022-03-19

1.4.3 获取本周或本月第一天及最后一天

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :3/21/22 5:33 PM
# 文件      :获取本周或本月第一天及最后一天.py
# IDE      :PyChar
# 今天日期
d_today = datetime.date.today()
print(f'今天是{d_today}')

# 获取本周的第一天

the_first_day_of_this_week = d_today - datetime.timedelta(d_today.weekday())
print(f'本周第一天是:{d_today}')
今天是2022-03-21
本周第一天是:2022-03-21
# 获取本周最后一天
the_last_day_of_this_week = d_today + datetime.timedelta(6-d_today.weekday())
print(f'本周最后一天是:{the_last_day_of_this_week}')
本周最后一天是:2022-03-27

1.4.4 计算两个日期相差多少天

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :3/21/22 6:07 PM
# 文件      :9.4.4计算两个日期相差多少天.py
# IDE      :PyCharm
import datetime

# timedelta 对象的计算
dt2 = datetime.datetime.today()
dt1 = datetime.datetime(2021,0o03,21,18,12,10)
td1 = dt2 - dt1

n = int(input(f'请输入一个数字:'))
new_year = datetime.date.today().year - n
dt1 = datetime.datetime(new_year,dt2.month, dt2.day, dt2.hour, dt2.minute, dt2.second)
td1 = dt2 - dt1
print(f'{n}年前的今天,我们的。已经一起走过{td1}')
请输入一个数字:1
1年前的今天,我们相遇。你我已经一起走过365 days, 0:00:00.480073
请注意:如果需要计算两个日期之间总共相差多少秒,应该用total_seconds()方法
td = datetime.timedelta(days=2, seconds=68539, microseconds=403113)
print(td.days, td.total_seconds())
2 241339.403113

```

相关文章
|
1天前
|
网络安全 开发工具 iOS开发
macOS 系统安装Python-nmap模块
macOS 系统安装Python-nmap模块
10 2
|
1天前
|
数据处理 Python
Python编程-利用datetime模块生成当前年份之前指定的间隔所有年份的日期列表和csv文件
Python编程-利用datetime模块生成当前年份之前指定的间隔所有年份的日期列表和csv文件
|
1天前
|
数据处理 Python
Python内置时间模块:Datetime实例详解(一)
Python内置时间模块:Datetime实例详解(一)
10 1
|
11月前
|
C++ Python
54 python - 类属性、实例属性
54 python - 类属性、实例属性
35 0
|
Python
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
70 0
|
Python
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
175 0
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
|
Python
【Python零基础入门篇 · 15】:面向对象基础(类和对象)、类属性和实例属性的访问、构造函数
【Python零基础入门篇 · 15】:面向对象基础(类和对象)、类属性和实例属性的访问、构造函数
114 0
【Python零基础入门篇 · 15】:面向对象基础(类和对象)、类属性和实例属性的访问、构造函数
|
Linux 云计算 开发者
【python | linux09】类属性、实例属性、面向对象四大特征
在类的属性中,分为公有类属性和私有类属性; 公有类属性:所有对象都可访问; 私有类属性:只能在类内部访问,不能通过实例对象访问
167 0
【python | linux09】类属性、实例属性、面向对象四大特征
|
Python
Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性
Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性
224 0
Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性