Python datetime 日期对象基本用法:创建,转换和运算

Python datetime 日期对象基本用法:创建,转换和运算

文章目录

Python datetime一、引入 datetime 模块二、创建,修改三、转换1. datetime.datetime.strftime(format) 日期对象转换为指定格式化的字符串2. datetime.datetime.strptime(str, format) 日期字符串转换为日期对象3. datetime.datetime.fromtimestamp(ts) 时间戳转日期4. datetime.datetime.timestamp() 日期对象转时间戳

四、运算

Python datetime

Python datetime 官方文档

一、引入 datetime 模块

Python 的 datetime 模块是常用的日期处理模块,模块中的 datetime 类即为我们常用的日期对象,两者名称是完全相同,初次使用时可能会弄混,我们常说的 datetime 其实是对应模块中的 datetime类。

而 datetime 模块中实际上包括了若干描述时间的类,如下:

timedatetimedeltatzinfotimezonedatetime

所以常用的方法可以是实例化上面的类,或者是使用类中的方法:

# 引入 datetime 模块

import datetime

# datetime模块的变量

max_year = datetime.MAXYEAR # 9999

# 用法一

# 使用 datetime类 的方法

today = datetime.datetime.today() # 这个方法在类中而不是外层模块中

# 用法二

# 实例化 datetime 对象,年月日必填

d = datetime.datetime(2024, 6, 1) # 两个 datetime !! 第一个是模块,第二个是模块里面同名的类

二、创建,修改

python 日期对象,可以设置 [year, month, day, hour, minute, second, microsecond] 到毫秒的时间:

import datetime

# 指定参数,例如哪一年,哪一个月份,什么时间都可以

# 必须指定 year, month, day

d = datetime.datetime(2021, 10, 10, 0, 0, 0)

# 当前时间

today = datetime.datetime.today()

另外,也可以对已经生成的对象进行修改,设置所需的时间,可以通过 replace 方法修改已经创建的时间:

d = datetime.datetime(2024, 10, 10, 0, 0, 0)

d.replace(year=2020)

# output

# 2020, 10, 10, 0, 0, 0

replace 可以设置的日期单位还包括:

daymonthsecondmicrosecond

可以直接访问日期对象的各个日期单位:

d = datetime.datetime(2024, 10, 10, 0, 0, 0)

print(d.year) # 2024

print(d.month) # 10

print(d.day) # 10

三、转换

当你需要对日期进行运算的时候,datetime 提供了时间加减的计算方法,此时将输入的日期字符串转换为 datetime 对象将更加方便;而当你需要传输,写入,或者是打印日期的时候,datetime 也提供了输出格式化字符串的方法。

这就涉及到日期对象(datetime) 和日期字符串(str)之间的相互转换。

1. datetime.datetime.strftime(format) 日期对象转换为指定格式化的字符串

可以通过 datetime 对象的 strftime 方法将其格式化输出成为对应的字符串:

import datetime

dt = datetime.datetime(2021, 1, 1, 0, 0, 0)

# 时间格式化的通配符很多,基本完全通用,但也有一些语言支持的通配符集合有

# 差异,例如 MySQL 里面还有 %i 表示 00-59 的时间格式,注意不要混淆

# 常用

# %Y 四位年份 0000-2024

# %y 两位年份 00-99

# %m 月份 01-12

# %d 日期 01-31

# %H 小时 01-24

# %I 12小时制 01-12

# %M 分钟 01-59

# %S 秒钟 01-59

# %w 周 0-6

# %a 周英文 Sat

# %A 周英文全称 Saturday

# %j 今年的第几天 001-366

# %U 今年以周一开始的第几周 00-53

datetimeStr = dt.strftime('%Y-%m-%d %H:%M:%S')

print(datetimeStr)

# output

# '2021-01-01 00:00:00'

2. datetime.datetime.strptime(str, format) 日期字符串转换为日期对象

可以通过 datetime 类的 strptime 函数,将字符串根据指定格式转换为对应的日期对象:

# 注意还是两个datetime,这里是 datetime 类的方法

dt = datetime.datetime.strptime('2021-09-01 10:53:13', '%Y-%m-%d')

#

# 报错!天,时分秒未转换

dt = datetime.datetime.strptime('2021-09-01 10:53:13', '%Y-%m-%d %H:%M:%S')

# 正常转换

# 2021, 9, 1, 10, 53, 13

3. datetime.datetime.fromtimestamp(ts) 时间戳转日期

将时间戳转换为字符串:

datetime.datetime.fromtimestamp(ts) # ts 为整数类型的时间戳

得到的日期为距离 1970-01-01 08:00:00 的 ts 秒后的日期,所以如果 ts=0,则结果为 datetime.datetime(1970, 1, 1, 8, 0)。

4. datetime.datetime.timestamp() 日期对象转时间戳

转换的时间戳为该日期距离 1970-01-01 08:00:00 的秒数:

import datetime

# 当前时间戳,float 类型

datetime.datetime.today().timestamp()

# 等价于

(dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()

四、运算

日期的运算通过 datetime.datetime 日期对象和 timedelta 日期增量 之间的加减运算得到新的日期结果,通过引入 timedelta 进行使用,可以包括最大到一周的 week 的增量单位:

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

而在这些单位中,实际上只有 days,seoncds,microseconds 是存储的对应单位的值,而其他单位都会转化为上面三个单位中向下最近的单位表示,例如:

# 一天的时间单位量

day_delta = datetime.timedelta(days=1) # 实际即为 days=1

# 一周

week_delta = datetime.timedelta(weeks=1)

# 转化为 timedelta(days=7)

# 一小时

hour_delta = datetime.timedelta(hours=1)

# 转化为 timedelta(seconds=3600)

# 一分钟

min_delta = datetime.timedelta(minutes=1)

# 转化为 timedelta(seconds=60)

datetime 对象可以与 timedelta 对象进行加减运算,从而实现日期运算:

import datetime

# 当前时间

today = datetime.datetime.today()

# 昨天

yesterday = today - datetime.timedelta(days=1)

# 明天

tomorrow = today + datetime.timedelta(days=1)

# 去年年份

last_year = (today.replace(day=1) - datetime.timedelta(days=1)).year

相关推荐

365APP

"保"怎么读、"保"的部首及意思解释

📅 10-05 👁️ 6540
如何通过 10 个步骤为您的企业创建一个网站
365bet平台规则

如何通过 10 个步骤为您的企业创建一个网站

📅 06-28 👁️ 1388
器官移植前最长可以在体外待多久?
365APP

器官移植前最长可以在体外待多久?

📅 08-25 👁️ 3643
2025杭州氧气音乐节(时间+地点+门票详情)
365bet平台规则

2025杭州氧气音乐节(时间+地点+门票详情)

📅 09-19 👁️ 9081