一、Python 日期和时间
Python 提供了多个内置模块来处理日期和时间,其中最常用的是 datetime
模块。这个模块提供了类来操作日期、时间、日期和时间间隔。
以下是一些基本的日期和时间操作:
- 导入模块
from datetime import datetime
- 获取当前日期和时间
now = datetime.now()
print(now)
- 格式化日期和时间
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_date)
- 解析字符串为日期时间对象
date_string = "2023-10-23 12:34:56"
date_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(date_object)
- 日期和时间的算术运算
# 假设我们有两个日期
date1 = datetime(2023, 10, 23)
date2 = datetime(2023, 11, 23)
# 计算两个日期之间的天数差
delta = date2 - date1
print(delta.days)
- 其他有用的方法
* `datetime.today()`: 返回当前日期。
* `datetime.utcnow()`: 返回当前的UTC日期和时间。
* `datetime.fromtimestamp(timestamp)`: 从一个时间戳创建一个日期时间对象。
* `datetime.year`, `datetime.month`, `datetime.day`, `datetime.hour`, `datetime.minute`, `datetime.second`, `datetime.microsecond`: 访问日期和时间的各个部分。
二、时间元组(struct_time)
描述 | 属性名 | 值 |
---|---|---|
4位数年| tm_year| 2008
月| tm_mon| 1 到 12
日| tm_mday| 1 到 31
小时| tm_hour| 0 到 23
分钟 | tm_min |0 到 59
秒| tm_sec| 0 到 61 (60或61 是闰秒)
一周的第几日| tm_wday| 0 到 6 (0是周一)
一年的第几日| tm_yday |一年中的第几天,1 到 366
夏令时| tm_isdst| 是否为夏令时,值有:1(夏令时)、0(不是夏令时)、-1(未知),默认 -1
三、时间日期格式化符号
符号 | 描述 |
---|---|
%y| 两位数的年份表示(00-99)
%Y |四位数的年份表示(000-9999)
%m| 月份(01-12)
%d |月内中的一天(0-31)
%H |24小时制小时数(0-23)
%I| 12小时制小时数(01-12)
%M| 分钟数(00=59)
%S |秒(00-59)
%a |本地简化星期名称
%A |本地完整星期名称
%b |本地简化的月份名称
%B |本地完整的月份名称
%c |本地相应的日期表示和时间表示
%j |年内的一天(001-366)
%p |本地A.M.或P.M.的等价符
%U |一年中的星期数(00-53)星期天为星期的开始
%w |星期(0-6),星期天为星期的开始
%W |一年中的星期数(00-53)星期一为星期的开始
%x |本地相应的日期表示
%X |本地相应的时间表示
%Z |当前时区的名称
%% |%号本身
四、Time(时间) 模块
Python 的 time
模块提供了各种与时间相关的函数。虽然 datetime
模块在处理日期和时间时更为强大和灵活,但 time
模块在处理时间戳和简单的时间操作时仍然很有用。
以下是一些 time
模块的基本用法:
- 导入模块
import time
- 获取当前时间戳
时间戳通常是从某个固定点(通常是1970年1月1日00:00:00 UTC)到现在的秒数。
timestamp = time.time()
print(timestamp)
- 将时间戳转换为本地时间
local_time = time.localtime(timestamp)
print(local_time)
- 将时间戳转换为格式化字符串
formatted_time = time.ctime(timestamp)
print(formatted_time)
- 睡眠(暂停执行)
sleep
函数可以让程序暂停指定的秒数。
time.sleep(5) # 程序将暂停5秒
- 获取当前时间的各个部分
current_time = time.localtime()
year = current_time.tm_year
month = current_time.tm_mon
day = current_time.tm_mday
hour = current_time.tm_hour
minute = current_time.tm_min
second = current_time.tm_sec
print(f"Year: {year}, Month: {month}, Day: {day}, Hour: {hour}, Minute: {minute}, Second: {second}")
- 将结构化时间转换为时间戳
structured_time = time.struct_time((2023, 10, 23, 12, 34, 56, 0, 0, 0))
timestamp_from_structured = time.mktime(structured_time)
print(timestamp_from_structured)
- 性能计时
time
模块也可以用来测量代码段的执行时间。
start_time = time.time()
# 执行一些代码
for i in range(0, 1000000):
pass
end_time = time.time()
elapsed_time = end_time - start_time
print(f"Elapsed time: 0.0707 seconds")
需要注意的是,time
模块处理的是时间戳和基于时间的简单操作,而 datetime
模块更适合处理日期和时间的复杂操作和格式化。在大多数情况下,如果你需要处理日期和时间,建议使用 datetime
模块。
五、Calendar(日历)模块
Python 的 calendar
模块提供了用于处理日历相关的功能,包括打印日历、计算周数和月中的某天是周几等。以下是一些 calendar
模块的基本用法:
- 导入模块
import calendar
- 打印当前月份的日历
print(calendar.month(2023, 10)) # 打印2023年10月的日历
- 打印一年的日历
print(calendar.calendar(2023)) # 打印2023年的日历
- 获取一个月的天数
days_in_month = calendar.monthrange(2023, 10)[1]
print(days_in_month) # 输出2023年10月的天数
- 判断某个日期是周几
weekday = calendar.weekday(2023, 10, 23)
print(weekday) # 输出0表示周一,1表示周二,以此类推
- 设置周的开始和结束
默认情况下,周一是每周的第一天,周日是最后一天。但你可以更改这些设置。
calendar.setfirstweekday(calendar.SUNDAY) # 设置周日为每周的第一天
print(calendar.monthcalendar(2023, 10)) # 打印2023年10月的日历,此时周日为每周的第一天
- 获取指定周的月历
week_calendar = calendar.monthcalendar(2023, 10)
print(week_calendar[1]) # 打印2023年10月的第二周的日历
- 计算两个日期之间的周数
date1 = datetime.date(2023, 10, 1)
date2 = datetime.date(2023, 10, 31)
weeks_between = (date2 - date1).days // 7
print(weeks_between) # 输出两个日期之间的周数
请注意,虽然 calendar
模块提供了一些基本的日历操作功能,但它不像 datetime
模块那样功能丰富和强大。在处理更复杂的日期和时间问题时,通常建议使用 datetime
模块。