Python3 日期和时间

Python3 日期和时间完全指南

Python3 日期和时间完全指南

编程小白也能轻松理解的日期时间处理知识汇总

核心概念

在编程中处理时间,我们需要理解几个基本概念:

  • 时间戳(Timestamp):计算机存储时间的标准方式,表示从1970年1月1日00:00:00 UTC(称为Unix纪元)开始经过的秒数
  • 日期(Date):包含年、月、日的信息
  • 时间(Time):包含时、分、秒、微秒的信息
  • 时区(Timezone):全球分为24个时区,处理时间必须考虑时区的影响
2023
11
20
14:30
时间
UTC+8
时区

time模块

time模块提供与时间相关的基本功能:

获取当前时间戳

import time
current_time = time.time()
# 输出:1699967890.123456 (当前时间戳)

时间戳转时间元组

time_tuple = time.localtime(current_time)
# 输出:time.struct_time(tm_year=2023, tm_mon=11,
# tm_mday=13, tm_hour=14, tm_min=30, tm_sec=15, …)

格式化时间

formatted = time.strftime(“%Y-%m-%d %H:%M:%S”, time_tuple)
# 输出:”2023-11-13 14:30:15″
小提示: time模块适合简单的时间操作,对于复杂的日期计算建议使用datetime模块

datetime模块

datetime模块提供更高级的日期时间处理功能:

获取当前日期和时间

from datetime import datetime
now = datetime.now()
# 输出:datetime(2023, 11, 13, 14, 30, 15, 123456)

创建特定日期

from datetime import date
d = date(2023, 11, 13)
# 输出:datetime.date(2023, 11, 13)

日期时间格式化

formatted = now.strftime(“%Y年%m月%d日 %H时%M分”)
# 输出:”2023年11月13日 14时30分”

时间计算

from datetime import timedelta
tomorrow = now + timedelta(days=1)
last_week = now – timedelta(weeks=1)

时区处理

处理时区是日期时间的关键部分:

设置时区

from datetime import datetime, timezone, timedelta
# 创建UTC时间
utc_time = datetime.now(timezone.utc)

# 创建自定义时区(如北京时间)
beijing_tz = timezone(timedelta(hours=8))
beijing_time = datetime.now(beijing_tz)

时区转换

# 将北京时间转换为纽约时间
from pytz import timezone
bj = timezone(‘Asia/Shanghai’)
ny = timezone(‘America/New_York’)

bj_time = datetime.now(bj)
ny_time = bj_time.astimezone(ny)
# 北京时间比纽约时间早13小时
提示: 对于高级时区处理,建议安装pytz库:pip install pytz

时间格式化符号

格式化字符串常用符号:

%Y – 四位数年份(2023)
%y – 两位数年份(23)
%m – 两位数的月份(01-12)
%d – 两位数的日期(01-31)
%H – 24小时制小时(00-23)
%I – 12小时制小时(01-12)
%M – 分钟(00-59)
%S – 秒(00-59)
%A – 完整的星期名(Monday)
%B – 完整的月份名(November)
%p – AM/PM标识(AM/PM)

格式化示例

now.strftime(“%Y-%m-%d”) # “2023-11-13”
now.strftime(“%d/%m/%y”) # “13/11/23”
now.strftime(“%I:%M %p”) # “02:30 PM”
now.strftime(“%A, %B %d”) # “Monday, November 13”

时间计算与比较

datetime对象可以直接进行比较和数学运算:

日期比较

from datetime import date
d1 = date(2023, 11, 10)
d2 = date(2023, 11, 15)

d1 < d2 # True
d1 == d2 # False

日期差计算

delta = d2 – d1
print(delta.days) # 5
print(type(delta)) # <class ‘datetime.timedelta’>

生日计算器

birthday = date(1990, 5, 15)
today = date.today()
age = today.year – birthday.year

# 如果今年生日还没过,年龄减1
if (today.month, today.day) < (birthday.month, birthday.day):
    age -= 1

重要提示

1. 处理时间时始终考虑时区

2. 使用datetime代替time进行复杂操作

3. 时间戳便于存储,datetime对象便于操作

常见错误

1. 忽略时区导致时间错误

2. 混淆时间戳与格式化时间

3. 使用两位数年份导致千年虫问题

最佳实践

1. 在系统中统一使用UTC时间

2. 只在显示时转换为本地时间

3. 使用ISO 8601格式存储和传输时间

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部