在 Python 开发中,咱们常常须要解决日期和工夫。Python 提供了一些内置模块,如 datetime
、time
和calendar
,这些模块让咱们可能轻松地获取、操作和格式化日期和工夫。本文将介绍如何在 Python 中应用这些模块进行日期和工夫的解决。
一、获取以后日期和工夫
在 Python 中,咱们能够应用 datetime
模块的 datetime
类来获取以后的日期和工夫。
import datetime
# 获取以后日期和工夫
now = datetime.datetime.now()
print(now) # 输入:2023-06-25 09:00:00.000000
这将返回以后日期和工夫的一个 datetime
对象。这个对象蕴含了年、月、日、时、分、秒和微秒。
二、日期和工夫的操作
datetime
对象反对很多操作,例如咱们能够加减 timedelta
对象来扭转日期和工夫。
import datetime
now = datetime.datetime.now()
# 创立一个 timedelta 对象
delta = datetime.timedelta(days=1, hours=2)
# 加减 timedelta
future = now + delta
past = now - delta
print(future) # 输入:2023-06-26 11:00:00.000000
print(past) # 输入:2023-06-24 07:00:00.000000
timedelta
对象示意一个工夫距离,能够是几天、几小时、几分钟或几秒等。
三、日期和工夫的格式化
咱们常常须要把日期和工夫转换为字符串,或者从字符串中解析出日期和工夫。datetime
对象的 strftime
办法能够将日期和工夫格式化为字符串,strptime
办法能够将字符串解析为日期和工夫。
import datetime
now = datetime.datetime.now()
# 格式化为字符串
s = now.strftime('%Y-%m-%d %H:%M:%S')
print(s) # 输入:2023-06-25 09:00:00
# 从字符串解析
d = datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S')
print(d) # 输入:2023-06-25 09:00:00
这里的 %Y
、%m
、%d
、%H
、%M
和%S
是格式化代码,别离代表年、月、日、时、分和秒。
四、工夫戳和日期工夫的转换
在 Python 中,咱们常常须要将日期工夫转换为工夫戳,或者将工夫戳转换为日期工夫。datetime
对象的 timestamp
办法能够将日期工夫转换为工夫戳,datetime
类的 fromtimestamp
办法能够将工夫戳转换为日期工夫。
import datetime
now = datetime.datetime.now()
# 转换为工夫戳
t = now.timestamp()
print(t) # 输入:1693086000.0
# 从工夫戳转换
d = datetime.datetime.fromtimestamp(t)
print(d) # 输入:2023-6-25 17:00:00
然而在解决工夫戳时,咱们须要留神时区问题。以上述代码为例,timestamp 办法返回的工夫戳是将以后工夫转为 UTC 工夫,而后再转换为工夫戳。而 fromtimestamp 办法默认将工夫戳转换为本地工夫。如果咱们心愿将工夫戳转换为 UTC 工夫,咱们能够应用 utcfromtimestamp 办法。
import datetime
now = datetime.datetime.now()
转换为工夫戳
t = now.timestamp()
print(t) # 输入:1693086000.0
从工夫戳转换为本地工夫
d_local = datetime.datetime.fromtimestamp(t)
print(d_local) # 输入:2023-06-25 17:00:00
从工夫戳转换为 UTC 工夫
d_utc = datetime.datetime.utcfromtimestamp(t)
print(d_utc) # 输入:2023-06-25 09:00:00
在解决波及到不同地理位置的工夫问题时,正确处理时区问题十分重要。同时,理解工夫戳的示意办法也有助于咱们了解和解决一些常见的日期工夫问题。## 五、解决时区
在 Python 中解决带时区的日期和工夫,咱们须要应用到 `pytz` 库。`pytz` 库是一个第三方库,提供了世界时区定义和与之相干的函数。
from datetime import datetime
import pytz
创立一个带时区的 datetime 对象
now = datetime.now(pytz.timezone(‘Asia/Shanghai’))
转换时区
now_utc = now.astimezone(pytz.timezone(‘UTC’))
print(now) # 输入:2023-06-25 17:00:00.000000+08:00
print(now_utc) # 输入:2023-06-25 09:00:00.000000+00:00
## 六、日期和工夫的计算
咱们能够应用 `datetime` 对象的 `replace` 办法来扭转日期和工夫,例如计算上个月的最初一天和下个月的第一天。
from datetime import datetime
now = datetime.now()
上个月的最初一天
if now.month == 1:
last_day_of_last_month = now.replace(year=now.year-1, month=12, day=31)
else:
last_day_of_last_month = now.replace(month=now.month-1, day=31)
下个月的第一天
if now.month == 12:
first_day_of_next_month = now.replace(year=now.year+1, month=1, day=1)
else:
first_day_of_next_month = now.replace(month=now.month+1, day=1)
print(last_day_of_last_month)
print(first_day_of_next_month)
留神,这里的代码假如每个月都有 31 天,理论应用时须要进行更准确的解决。