Python中的时间与日期处理技巧分享
目录
- 1. 先来个简单的“时间基础操作”
- 获取当前时间
- 格式化输出
- 2. 从字符串转换为日期对象
- 3. 时间加减操作
- 获取未来或者过去的时间
- 4. 处理时区和夏令时
- 安装pytz库
- 设置时区
- 5. 处理日期范围
- 6. 不常见但实用的时间操作
- 获取一周的第几天
- 获取月份的天数
- 获取某个月的第一天和最后一天
- 获取当前时间戳
- 转换为UTC时间
- 判断某年是否是闰年
- 计算两个日期之间的工作日天数
- 小结
时间这东西,最神奇的地方就在于——它从来不等人!就像你说好5分钟后起床,结果一睁眼发现已经是中午了;或者老板让你统计个Excel报表,你想着"一会儿就搞定",结果时间一晃,天都黑了。
在python的世界里,时间也很有个性,格式多种多样、时区坑多如山、转换容易让人头秃,但别担心,今天我们就来聊聊Python中的时间与日期处理,让你从时间小白变成时间大师!
1. 先来个简单的“时间基础操作”
如果你是Python初学者,那你肯定会用到datetime
模块。让我们从最简单的创建和输出时间开始。
获取当前时间
import djsatetime now = datetime.datetime.now() print(now)
这段代码简单明了,datetime.now()
会返回当前的日期和时间。例如:
2025-03-19 12:30:45.678901
当然,你也可以自定义格式来输出时间。
格式化输出
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S") print(formatted_time)
这段代码使用strftime
方法来格式化日期和时间。常见的格式化代码包括:
格式符 | 含义 |
---|---|
%Y | 四位年份(2025) |
%m | 月份(01-12) |
%d | 日期(01-31) |
%H | 小时(00-23) |
%M | 分钟(00-59) |
%S | 秒(00-59) |
输出结果类似:
2025-03-19 12:30:45
这是不是比原始的时间输出看起来更加整洁了?
2. 从字符串转换为日期对象
假如你从文件或者用户输入中获取到一个时间字符串,那该怎么把它转成Python中的日期对象呢?别担心,这个问题简单得很,strptime
方法来帮忙。
time_str = "2025-03-19 12:30:45" time_obj = datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S") print(time_obj)
这里,strptime
方法会根据你提供的格式化字符串,将时间字符串转化为一个datetime
对象。转换后的结果会是一个标准的日期时间对象,可以继续进行各种操作。
3. 时间加减操作
获取未来或者过去的时间
有时候你可能需要获取一个日期的前几天或后几天的时间。例如,假设今天php是2025年3月19日,你想知道7天后的日期。通过timedelta
,这可以轻松做到。
today = datetime.datetime.now() delta = datetime.timedelta(days=7) future_date = today + delta print(future_date)
输出结果:
2025-03-26 12:30:45.678901
同样,你也可以做日期的减法,得到过去的某个日期。
past_date = today - delta print(past_date)
输出结果:
2025-03-12 12:30:45.678901
4. 处理时区和夏令时
大家可能知道,处理时区有点麻烦,因为不同的时区之间会有时差。而且,夏令时(DST)会让你头疼不已。比如说,北京时间与纽约时间的差异就会随着夏令时的变化而有所不同。怎么处理这些问题呢?答案就是pytz
库。
安装pytz库
pip install pytz
设置时区
import pytz now = datetime.datetime.now(pytz.timezone("Asia/Shanghai")) print(now) ny_time = datetime.datetime.now(pytz.timezone("America/New_York")) print(ny_time)
通过pytz
,你可以设置时区,并且正确处理夏令时的转换。如果你正在做涉及全球用户的应用,这个库真的能帮你避免不少麻烦。
5. 处理日期范围
有时候我们需要生成一个日期范围,比如从2025年1月1日到2025年1月10日。这个可以用date_range
来轻松搞定。
import pandas as pd date_range = pd.date_range(start="2025-01-01", end="2025-01-10") print(date_range)
输出的结果是一个日期范围:
DatetimeIndex(['2025-01-01', '2025-01-02', '2025-01-03', '2025-01-04', '2025-01-05', '2025-01-06', '2025-01-07', '2025-01-08', '2025-01-09', '2025-01-10'], dtype='datetime64[ns]', freq='D')
非常适合用来生成日志时间戳、安排任务等。
6. 不常见但实用的时间操作
获取一周的第几天
now = datetime.datetime.now() weekday = now.weekday() # 周一是0,周日是6 print(f"今天是星期{weekday + 1}")
这段代码会返回今天是星期几,输出类似“今天是星期3”。
获取月份的天数
import calendar year, month = 2025, 2 days_in_month = calendar.monthrange(year, month)[1] print(f"{year}年{month}月有 {days_in_month} 天")
这段代码会返回某年的某个月有多少天,比如:“2025年2月有 28 天”
获取某个月的第一天和最后一天
from datetime import date first_day = date(year, month, 1) lwww.devze.comast_day = date(year, month, days_in_month) print(first_day, last_day)
获取当前时间戳
如果你需要一个时间戳(自1970年1月1日以来的秒数),可以使用timesandroidtamp()
:
timestamp = datetime.datetime.now().timestamp() print(timestamp)
转换为UTC时间
如果你需要将本地时间转为UTC时间:
now_utc = datetime.datetime.now(pytz.utc) print(now_utc)
判断某年是否是闰年
def is_leap_yearjs(year): return calendar.isleap(year) print(is_leap_year(2024)) # True(闰年) print(is_leap_year(2025)) # False(平年)
计算两个日期之间的工作日天数
import numpy as np start_date = datetime.date(2025, 3, 1) end_date = datetime.date(2025, 3, 10) workdays = np.busday_count(start_date.strftime('%Y-%m-%d'), end_date.strftime('%Y-%m-%d')) print(f"工作日天数: {workdays}")
小结
今天,我们通过一些简单又实用的代码,了解了如何在Python中处理时间和日期。虽然时间和日期看起来是一块很基础的内容,但细节处理起来可真是个大坑,尤其是时区、夏令时等问题。所以,掌握这些基本技巧,不仅能让你的代码更精确,还能避免很多因时间错误而引发的麻烦。
以上就是Python中的时间与日期处理技巧分享的详细内容,更多关于Python时间与日期处理的资料请关注编程客栈(www.devze.com)其它相关文章!
精彩评论