说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在 Python 中处理时间和日期有多种方法,主要包括使用内置库和第三方库。本文介绍一些常用的内置库和第三方库,以及它们的典型应用场景和示例代码。
time 模块主要用于处理 Unix 时间戳(自1970年1月1日以来的秒数),适用于需要精确处理时间间隔和延迟的场景。
import time
# 获取当前时间戳
current_timestamp = time.time()
print(f"当前时间戳: {current_timestamp}")
# 将时间戳转换为本地时间的 struct_time 对象
local_time = time.localtime(current_timestamp)
print(f"本地时间: {time.strftime('%Y-%m-%d %H:%M:%S', local_time)}")
# 将时间戳转换为 UTC 时间的 struct_time 对象
utc_time = time.gmtime(current_timestamp)
print(f"UTC 时间: {time.strftime('%Y-%m-%d %H:%M:%S', utc_time)}")
# 获取 CPU 时间
cpu_time = time.process_time()
print(f"CPU 时间: {cpu_time}")
# 将 struct_time 对象转换为时间戳
time_tuple = (2024, 7, 1, 12, 0, 0, 0, 0, 0)
timestamp = time.mktime(time_tuple)
print(f"时间戳: {timestamp}")
# 格式化时间
formatted_time = time.strftime('%Y-%m-%d %H:%M:%S', local_time)
print(f"格式化时间: {formatted_time}")
# 解析时间字符串
time_str = '2024-07-01 12:00:00'
parsed_time = time.strptime(time_str, '%Y-%m-%d %H:%M:%S')
print(f"解析后的 struct_time 对象: {parsed_time}")
# 休眠 2 秒
print("休眠 2 秒")
time.sleep(2)
print("继续执行")
datetime 模块提供了更高级的日期和时间操作,适用于需要处理日期、时间和时间差等场景。
示例代码:
from datetime import datetime, timedelta, date, time
# 获取当前日期和时间
now = datetime.now()
print(f"当前日期和时间: {now}")
# 获取当前日期
current_date = date.today()
print(f"当前日期: {current_date}")
# 获取当前时间
current_time = datetime.now().time()
print(f"当前时间: {current_time}")
# 格式化日期和时间
formatted_now = now.strftime('%Y-%m-%d %H:%M:%S')
print(f"格式化后的日期和时间: {formatted_now}")
# 计算时间差
future = now + timedelta(days=5, hours=3)
print(f"未来的日期和时间: {future}")
# 解析日期和时间字符串
date_str = '2024-07-01 12:00:00'
parsed_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
print(f"解析后的日期和时间: {parsed_date}")
# 获取日期的年、月、日
year = now.year
month = now.month
day = now.day
print(f"年: {year}, 月: {month}, 日: {day}")
# 获取时间的时、分、秒、微秒
hour = now.hour
minute = now.minute
second = now.second
microsecond = now.microsecond
print(f"时: {hour}, 分: {minute},"
f" 秒: {second}, 微秒: {microsecond}")
# 获取一个日期的星期几(0是星期一,6是星期日)
weekday = now.weekday()
print(f"今天是星期: {weekday}")
# 获取一个日期的 ISO 周数(ISO 年、ISO 周数、ISO 星期几)
iso_calendar = now.isocalendar()
print(f"ISO 日历: 年: {iso_calendar[0]},"
f" 周: {iso_calendar[1]},"
f" 星期: {iso_calendar[2]}")
# 获取当前时间的时间戳
timestamp = now.timestamp()
print(f"当前时间戳: {timestamp}")
# 获取特定时间(例如正午)
noon = time(12, 0, 0)
print(f"正午时间: {noon}")
# 创建一个新的日期对象
new_date = date(2024, 7, 1)
print(f"新的日期对象: {new_date}")
# 创建一个新的时间对象
new_time = time(14, 30)
print(f"新的时间对象: {new_time}")
# 创建一个新的日期时间对象
new_datetime = datetime(2024,
7,
1,
14,
30)
print(f"新的日期时间对象: {new_datetime}")
# 将日期和时间对象组合成一个 datetime 对象
combined_datetime = datetime.combine(new_date, new_time)
print(f"组合后的日期时间对象: {combined_datetime}")
更多内容详见:datetime 时间日期 。
calendar 模块用于处理日历相关的操作,例如生成某个月的日历,判断某一年是否是闰年等。
示例代码:
import calendar
# 打印2024年7月的日历
print("2024年7月的日历:")
print(calendar.month(2024, 7))
# 判断2024年是否是闰年
is_leap = calendar.isleap(2024)
print(f"2024年是闰年吗? {is_leap}")
# 获取某年的闰年数量
leap_days = calendar.leapdays(2000, 2025)
print(f"2000年至2025年之间的闰年数量: {leap_days}")
# 获取某个月的第一天是星期几以及这个月的天数
first_weekday, num_days = calendar.monthrange(2024, 7)
print(f"2024年7月的第一天是星期几(0是星期一):"
f" {first_weekday}, 天数: {num_days}")
# 获取某个月的日历数据
month_calendar = calendar.monthcalendar(2024, 7)
print("2024年7月的日历数据:")
for week in month_calendar:
print(week)
# 获取某一年的日历
print("2024年的日历:")
print(calendar.calendar(2024))
# 设置一周的第一天为星期日
calendar.setfirstweekday(calendar.SUNDAY)
print("设置一周的第一天为星期日:")
print(calendar.month(2024, 7))
# 获取某一天是这一年的第几天
day_of_year = (calendar.datetime.date(2024, 7, 1)
.timetuple().tm_yday
)
print(f"2024年7月1日是这一年的第几天: {day_of_year}")
# 获取某个月的工作日(除去周末)
print("2024年7月的工作日:")
for week in month_calendar:
for day in week:
if day != 0 and week.index(day) < 5: # 排除周末
print(day)
# 打印某年的某个月的日历,以每周一行的形式
print("2024年7月的日历,以每周一行的形式:")
for week in calendar.monthcalendar(2024, 7):
print(week)
# 获取每个月的名字
print("每个月的名字:")
for month_name in calendar.month_name:
print(month_name)
# 获取每周的名字
print("每周的名字:")
for day_name in calendar.day_name:
print(day_name)
更多内容详见:calendar 日历 。
time 模块:
datetime 模块:
一般情况下,对于大多数日期和时间处理任务,推荐使用 datetime 模块,因为它提供了更丰富和直观的功能。但对于简单的时间戳操作或者需要高性能的场景,time 模块可能更合适。
pytz 库用于处理时区问题,特别是跨时区的日期和时间转换。
示例代码:
from datetime import datetime
import pytz
# 获取当前 UTC 时间
utc_now = datetime.now(pytz.utc)
print(f"当前 UTC 时间: {utc_now}")
# 将 UTC 时间转换为特定时区(例如美国东部时间)
est = pytz.timezone('US/Eastern')
est_now = utc_now.astimezone(est)
print(f"美国东部时间: {est_now}")
dateutil 库提供了更加灵活的日期和时间解析、计算和处理功能。
示例代码:
from datetime import datetime
from dateutil.relativedelta import relativedelta
# 解析日期字符串
date_str = '2023-07-01 12:00:00'
parsed_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
# 添加时间间隔
future_date = parsed_date + relativedelta(months=2, days=10)
print(f"未来的日期和时间: {future_date}")
arrow 库提供了更人性化的日期和时间操作接口,简化了许多常见的操作。
示例代码:
import arrow
# 获取当前时间
now = arrow.now()
print(f"当前时间: {now}")
# 格式化日期和时间
formatted_now = now.format('YYYY-MM-DD HH:mm:ss')
print(f"格式化后的日期和时间: {formatted_now}")
# 解析日期字符串
date_str = '2023-07-01 12:00:00'
parsed_date = arrow.get(date_str, 'YYYY-MM-DD HH:mm:ss')
print(f"解析后的日期和时间: {parsed_date}")
# 转换时区
est_now = now.to('US/Eastern')
print(f"美国东部时间: {est_now}")
在 Python 中进行时序数据分析,有几个常用的库,包括 pandas
, numpy
, statsmodels
, matplotlib
和 scipy
。以下是这些库的简介及简单示例。
pandas
是一个功能强大的数据分析库,提供了时间序列数据处理的多种工具。
示例代码:
import pandas as pd
import numpy as np
# 创建时间序列数据
date_range = pd.date_range(start='2023-01-01',
end='2023-12-31',
freq='D')
data = np.random.randn(len(date_range))
time_series = pd.Series(data, index=date_range)
# 简单统计分析
print("数据的描述性统计:")
print(time_series.describe())
# 滚动平均
rolling_mean = time_series.rolling(window=30).mean()
print("滚动平均 (窗口大小为 30):")
print(rolling_mean.head(40))
numpy 提供了高性能的数组计算,可以用来生成和处理时间序列数据。
示例代码:
import numpy as np
# 创建时间序列数据
date_range = np.arange('2023-01', '2024-01', dtype='datetime64[D]')
data = np.random.randn(len(date_range))
# 计算数据的均值和标准差
mean = np.mean(data)
std_dev = np.std(data)
print(f"数据的均值: {mean}, 标准差: {std_dev}")
statsmodels 是一个用于统计建模和计量经济学的库,提供了丰富的时间序列分析工具。
示例代码:
import statsmodels.api as sm
import pandas as pd
import numpy as np
# 创建时间序列数据
date_range = pd.date_range(start='2023-01-01',
end='2023-12-31',
freq='D')
data = np.random.randn(len(date_range))
time_series = pd.Series(data, index=date_range)
# ARIMA 模型拟合
model = sm.tsa.ARIMA(time_series, order=(1, 1, 1))
results = model.fit()
print("ARIMA 模型拟合结果:")
print(results.summary())
matplotlib 是一个广泛使用的数据可视化库,适用于绘制时间序列数据图表。
示例代码:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 创建时间序列数据
date_range = pd.date_range(start='2023-01-01',
end='2023-12-31',
freq='D')
data = np.random.randn(len(date_range))
time_series = pd.Series(data, index=date_range)
# 绘制时间序列数据
plt.figure(figsize=(10, 6))
plt.plot(time_series, label='Original')
plt.plot(time_series.rolling(window=30).mean(),
label='Rolling Mean',
color='red'
)
plt.title('Time Series Data')
plt.legend()
plt.show()
scipy 提供了许多科学计算工具,可以用于时间序列数据的统计分析和信号处理。
示例代码:
from scipy.signal import find_peaks
import pandas as pd
import numpy as np
# 创建时间序列数据
date_range = pd.date_range(start='2023-01-01',
end='2023-12-31',
freq='D')
data = np.random.randn(len(date_range))
time_series = pd.Series(data, index=date_range)
# 查找峰值
peaks, _ = find_peaks(time_series, height=0)
print("时间序列数据的峰值索引:")
print(peaks)
Python 提供了丰富的内置和第三方库来处理时间和日期,这些库各有优势,适用于不同的场景。通过了解和使用这些库,可以大大简化时间和日期的操作,提高开发效率。Python 提供了丰富的库来进行时序数据分析,包括数据处理、统计分析、建模和可视化。通过使用这些库,可以高效地进行时序数据分析。
更新时间:2024-07-03 12:05:32 标签:python 时间 日期