Python中字符串与datetime对象互转的核心是strptime()和strftime()方法,前者按指定格式解析字符串为datetime对象,后者将datetime对象格式化为字符串。使用时需确保格式代码精确匹配,否则会抛出ValueError;对于ISO 8601格式,推荐使用更快的fromisoformat();大批量转换时可借助pandas的to_datetime()提升性能。

Python中将字符串转换为
datetime
datetime
strptime()
datetime
strftime()
在Python日常开发中,处理日期和时间几乎是家常便饭。我发现,最常见且直接的方式就是使用内置的
datetime
strptime()
"%Y-%m-%d %H:%M:%S"
ValueError
举个例子,假设我们有一个日期字符串
date_str = "2023年10月27日 10时30分05秒"
datetime
from datetime import datetime
date_str = "2023年10月27日 10时30分05秒"
# 注意这里格式字符串要和date_str完全匹配
# %Y代表四位年份,%m代表两位月份,%d代表两位日期
# %H代表24小时制小时,%M代表分钟,%S代表秒
dt_object = datetime.strptime(date_str, "%Y年%m月%d日 %H时%M分%S秒")
print(f"转换后的datetime对象:{dt_object}")
print(f"类型:{type(dt_object)}")
# 再来一个常见的ISO格式
iso_str = "2023-10-27T10:30:05"
dt_iso = datetime.strptime(iso_str, "%Y-%m-%dT%H:%M:%S")
print(f"ISO格式转换后的datetime对象:{dt_iso}")这里面,每一个百分号开头的代码都有其特定含义,比如
%Y
%m
%d
strptime()
立即学习“Python免费学习笔记(深入)”;
将
datetime
datetime
datetime
strftime()
比如,你可能希望日期是“2023/10/27”,或者“October 27, 2023”。这完全取决于你的需求。
from datetime import datetime
# 假设我们有一个datetime对象
now = datetime.now()
print(f"当前的datetime对象:{now}")
# 格式化为常见的日期字符串
formatted_date = now.strftime("%Y-%m-%d")
print(f"格式化为'年-月-日':{formatted_date}")
# 格式化为包含时间的字符串
formatted_datetime = now.strftime("%Y/%m/%d %H:%M:%S")
print(f"格式化为'年/月/日 时:分:秒':{formatted_datetime}")
# 格式化为更友好的中文表示
chinese_datetime = now.strftime("今天是%Y年%m月%d日,现在是%H点%M分。")
print(f"格式化为中文表示:{chinese_datetime}")
# 更多格式代码的组合
full_string = now.strftime("%A, %B %d, %Y %I:%M:%S %p")
print(f"完整日期时间表示:{full_string}") # 例如:Friday, October 27, 2023 10:30:05 AMstrftime()
在将字符串转换为
datetime
ValueError
"2023-10-27"
"%Y/%m/%d"
"2023-02-30"
ValueError
"2023-10-27T10:30:00+08:00"
%z
为了让代码更健壮,尤其是在处理用户输入或外部数据时,我强烈建议使用
try-except
ValueError
from datetime import datetime
def safe_str_to_datetime(date_string, format_string):
try:
dt_obj = datetime.strptime(date_string, format_string)
return dt_obj
except ValueError as e:
print(f"转换失败:'{date_string}' 与格式 '{format_string}' 不匹配或日期无效。错误信息:{e}")
return None
# 尝试一个正确的转换
dt1 = safe_str_to_datetime("2023-10-27", "%Y-%m-%d")
if dt1:
print(f"成功转换:{dt1}")
# 尝试一个格式不匹配的转换
dt2 = safe_str_to_datetime("2023/10/27", "%Y-%m-%d")
if dt2:
print(f"成功转换:{dt2}") # 这行不会执行
# 尝试一个非法日期的转换
dt3 = safe_str_to_datetime("2023-02-30", "%Y-%m-%d")
if dt3:
print(f"成功转换:{dt3}") # 这行也不会执行有时候,我们可能面对多种可能的日期格式。在这种情况下,可以尝试按顺序用不同的格式字符串去解析,直到成功为止。但如果格式种类太多,或者完全不确定,可以考虑使用第三方库,比如
dateutil
parser
当我处理大量数据,比如从CSV文件读取成千上万行带有日期时间字符串的数据时,性能就成了我必须考虑的问题。反复调用
strptime()
预编译格式字符串:
strptime()
strptime()
使用datetime.fromisoformat()
"YYYY-MM-DDTHH:MM:SS"
"YYYY-MM-DD HH:MM:SS"
datetime
fromisoformat()
strptime()
from datetime import datetime
iso_str = "2023-10-27T10:30:05.123456"
dt_obj_iso = datetime.fromisoformat(iso_str)
print(f"使用fromisoformat转换:{dt_obj_iso}")它甚至能处理微秒,非常方便。
利用pandas
pandas
pandas
pd.to_datetime()
NaT
import pandas as pd
date_strings = ["2023-10-27", "2023/11/15", "invalid-date", "2024-01-01 12:00:00"]
s = pd.Series(date_strings)
# errors='coerce' 会将无法解析的日期转换为NaT
# infer_datetime_format=True 可以让pandas尝试推断格式,提高速度
dt_series = pd.to_datetime(s, errors='coerce', infer_datetime_format=True)
print(f"使用pandas批量转换:\n{dt_series}")在处理数据框架时,
pd.to_datetime()
总的来说,选择哪种方法取决于你的具体场景:单个转换、已知格式、未知格式、错误处理需求以及数据量大小。了解这些工具的优缺点,可以帮助我们更高效、更健壮地处理Python中的日期时间转换问题。
以上就是python如何将字符串转换为datetime对象_python字符串与datetime对象的相互转换的详细内容,更多请关注php中文网其它相关文章!
python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号