Python 时间操作datetime详情(下)
在《Python 时间操作datetime详情(上)》中,我们已经介绍了 date, time, datetime 对象的基本方法。在本篇文章中,我们将继续介绍 datetime 对象的进阶用法。
一、字符串和 datetime 之间的转换
- datetime 对象转字符串
datetime 对象可以使用 strftime() 方法将其转换为字符串,该方法需要传入一个格式化字符串。格式化字符串中用 % 和字母的组合表示不同的时间元素,如下所示:
格式 | 含义 |
---|---|
%Y | 年(四位) |
%y | 年(两位) |
%m | 月 |
%d | 日 |
%H | 时(24小时制) |
%I | 时(12小时制) |
%M | 分 |
%S | 秒 |
%p | 上午/下午 |
例如,将当前时间转换为字符串并以 YYYY-MM-DD HH:MM:SS 的格式输出:
import datetime
now = datetime.datetime.now()
str_now = now.strftime('%Y-%m-%d %H:%M:%S')
print(str_now) # 2022-06-03 14:10:23
- 字符串转 datetime 对象
datetime 对象可以使用 strptime() 方法将字符串转换为 datetime 对象,该方法需要传入两个参数:字符串和格式化字符串。格式化字符串与 strftime() 方法中的用法相同,不同的是,字符串中应包含与格式化字符串对应的时间元素。例如,将字符串 '2022-06-03 14:10:23' 转换为 datatime 对象:
import datetime
str_now = '2022-06-03 14:10:23'
now = datetime.datetime.strptime(str_now, '%Y-%m-%d %H:%M:%S')
print(now) # 2022-06-03 14:10:23
二、时区的设置和转换
- 时区的设置
datetime 模块中的 datetime 对象默认没有时区信息,通常使用 pytz 模块来设置时区。可以使用 pytz 模块中的 timezone() 方法创建时区对象,然后使用 datetime 对象的 replace() 方法改变时区信息。例如,将当前时间从 UTC 时间转换为北京时间(东八区):
import datetime
import pytz
utc_now = datetime.datetime.utcnow() # 获取当前 UTC 时间
utc_timezone = pytz.timezone('UTC') # 创建 UTC 时区对象
utc_now = utc_timezone.localize(utc_now) # 将 UTC 时间转换为含时区信息的 datetime 对象
beijing_timezone = pytz.timezone('Asia/Shanghai') # 创建北京时区对象
beijing_now = utc_now.astimezone(beijing_timezone) # 将 utc_now 转换为北京时间
print(beijing_now) # 2022-06-03 22:26:07.363000+08:00
- 时区的转换
通过 replace() 方法可以快速地将 datetime 对象的时区信息转换成其他时区。例如,将北京时间转换为纽约时间:
import datetime
import pytz
beijing_now = datetime.datetime.now(pytz.timezone('Asia/Shanghai')) # 获取当前北京时间
new_york_timezone = pytz.timezone('America/New_York') # 创建纽约时区对象
new_york_now = beijing_now.replace(tzinfo=pytz.timezone('Asia/Shanghai')).astimezone(new_york_timezone)
print(new_york_now) # 2022-06-03 10:29:10.568986-04:00
三、示例代码
下面是一个完整的示例代码,包括将日期字符串转换为 datetime 对象、将时区从 UTC 转换为北京时间、并将北京时间转换为纽约时间。
import datetime
import pytz
str_date = '2022-06-03 00:00:00'
# 将字符串转换为datetime对象(默认时区为本地时区)
dt = datetime.datetime.strptime(str_date, '%Y-%m-%d %H:%M:%S')
# 将时区从本地时区转换为UTC时区
local_tz = pytz.timezone('Asia/Shanghai')
utc_tz = pytz.timezone('UTC')
dt = local_tz.localize(dt).astimezone(utc_tz)
# 将时区从UTC时区转换为北京时间
beijing_tz = pytz.timezone('Asia/Shanghai')
dt = dt.astimezone(beijing_tz)
# 将北京时间转换为纽约时间
new_york_tz = pytz.timezone('America/New_York')
dt = dt.replace(tzinfo=beijing_tz).astimezone(new_york_tz)
print(dt) # 2022-06-02 12:00:00-04:00
以上是本篇文章的全部内容,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 时间操作datetime详情(下) - Python技术站