0

0

Python怎么将字符串转换为datetime对象_datetime模块字符串解析与格式化

下次还敢

下次还敢

发布时间:2025-09-20 17:19:01

|

558人浏览过

|

来源于php中文网

原创

核心工具是datetime模块的strptime()方法,它根据指定格式将字符串解析为datetime对象。例如,使用datetime.strptime("2023-10-27 14:30:05", "%Y-%m-%d %H:%M:%S")可成功转换;格式字符串必须与输入字符串完全匹配,包括分隔符和大小写;若格式不一致会抛出ValueError;为应对多种格式,可定义格式列表并逐个尝试;反向操作则用strftime()将datetime对象格式化为字符串,两者共享相同格式代码,构成日期时间处理的核心机制。

python怎么将字符串转换为datetime对象_datetime模块字符串解析与格式化

在Python中,将字符串转换为

datetime
对象的核心工具
datetime
模块里的
strptime()
方法。它就像一个翻译官,根据你提供的“格式说明书”,把日期时间字符串准确地解析成Python能理解的
datetime
对象。

解决方案

要将字符串转换为

datetime
对象,你需要使用
datetime
模块的
strptime()
函数。这个函数需要两个参数:你要转换的日期时间字符串,以及一个描述该字符串格式的格式代码字符串。

from datetime import datetime

# 假设我们有一个日期时间字符串
date_string = "2023-10-27 14:30:05"

# 定义字符串的格式,这必须和date_string完全匹配
# %Y: 四位数的年份 (e.g., 2023)
# %m: 两位数的月份 (e.g., 10)
# %d: 两位数的日期 (e.g., 27)
# %H: 24小时制的小时 (e.g., 14)
# %M: 两位数的分钟 (e.g., 30)
# %S: 两位数的秒 (e.g., 05)
format_string = "%Y-%m-%d %H:%M:%S"

try:
    # 执行转换
    datetime_object = datetime.strptime(date_string, format_string)
    print(f"原始字符串: {date_string}")
    print(f"转换后的datetime对象: {datetime_object}")
    print(f"对象的类型: {type(datetime_object)}")

    # 另一个例子:只有日期
    date_only_string = "2023/10/27"
    date_only_format = "%Y/%m/%d"
    datetime_date_only = datetime.strptime(date_only_string, date_only_format)
    print(f"只有日期的字符串转换: {datetime_date_only}")

except ValueError as e:
    print(f"转换失败,请检查格式字符串是否与日期时间字符串匹配: {e}")

理解
strptime
的核心:为什么格式化字符串如此重要?

说白了,

strptime
方法之所以能工作,完全依赖于你给它的那个“格式化字符串”。这玩意儿就像一把钥匙,必须和你要开的锁(日期时间字符串)严丝合缝。我记得刚开始用的时候,经常因为一个
%m
%m
区别,或者少了一个空格,就卡半天。

为什么这么严格?因为计算机不像人脑,它没有上下文理解能力。当你看到"2023-10-27",你知道这是年-月-日。但对程序来说,它可能认为"10"是小时,"27"是分钟,或者别的什么。所以,你必须明确告诉它:

%Y
代表四位数的年份,
%m
代表两位数的月份,
%d
代表日期。如果你的字符串里是斜杠
/
,那格式字符串里也得是
/
,而不是短横线
-

立即学习Python免费学习笔记(深入)”;

举个例子,

%Y-%m-%d %H:%M:%S
这个格式,它精确地描述了"2023-10-27 14:30:05"的每一个字符和它们所代表的含义。如果你的字符串是"Oct 27, 2023",那么你的格式字符串就得是
%b %d, %Y
。少一个逗号,多一个空格,都会导致
ValueError
。这种精确性,虽然初学时有点恼人,但正是它保证了日期时间解析的准确性和可靠性。没有这个“翻译规则”,
strptime
就无从下手,只能抛出错误告诉你“我看不懂!”

处理多种日期时间格式:如何应对不一致的输入?

在实际项目里,我们很少能遇到所有日期时间字符串都规规矩矩地保持同一种格式的情况。数据源可能来自不同的系统,或者用户输入习惯各异,这就导致了日期时间格式的“不统一”。面对这种挑战,我的做法通常是尝试多种可能的格式,直到找到一个匹配的。

MagickPen
MagickPen

在线AI英语写作助手,像魔术师一样在几秒钟内写出任何东西。

下载

一个常见的策略是使用

try-except
块来逐一尝试不同的格式。这有点像侦探破案,一个线索不行就换下一个。

from datetime import datetime

def parse_flexible_datetime(date_string):
    # 定义一个可能的格式列表,按可能性高低或特定需求排序
    formats = [
        "%Y-%m-%d %H:%M:%S",
        "%Y/%m/%d %H:%M:%S",
        "%Y-%m-%d",
        "%Y/%m/%d",
        "%d-%m-%Y %H:%M:%S",
        "%d/%m/%Y %H:%M:%S",
        "%b %d, %Y %I:%M%p", # e.g., Oct 27, 2023 02:30PM
        "%B %d, %Y" # e.g., October 27, 2023
    ]

    for fmt in formats:
        try:
            return datetime.strptime(date_string, fmt)
        except ValueError:
            # 如果当前格式不匹配,继续尝试下一个
            continue

    # 如果所有格式都尝试失败
    raise ValueError(f"无法解析日期时间字符串: '{date_string}',没有匹配的格式。")

# 测试不同的字符串
strings_to_parse = [
    "2023-10-27 14:30:05",
    "2023/10/27 09:15:00",
    "2023-10-27",
    "27-10-2023 10:00:00",
    "Oct 27, 2023 03:45PM",
    "October 27, 2023",
    "Invalid Date String" # 故意放一个无法解析的
]

for s in strings_to_parse:
    try:
        dt_obj = parse_flexible_datetime(s)
        print(f"'{s}' -> {dt_obj}")
    except ValueError as e:
        print(e)

这种方法虽然有点“笨”,但胜在可靠且不需要引入额外的库。当然,如果你处理的数据量非常大,且格式极其混乱,或者需要处理多种语言的月份名称,那么像

dateutil
这样的第三方库(比如
dateutil.parser.parse()
)会提供更强大的自动解析能力,它能智能地猜测日期时间格式。不过,
dateutil
虽然方便,但有时也会有“猜错”的风险,并且会增加项目的依赖。所以,我通常会先尝试用
datetime
模块的
strptime
解决,只有在确实复杂到难以维护格式列表时,才会考虑
dateutil

datetime
到字符串:反向操作的艺术与实践

既然我们能把字符串转换成

datetime
对象,那反过来,把
datetime
对象格式化成字符串,自然也是
datetime
模块的拿手好戏。这个操作是通过
strftime()
方法实现的,它和
strptime()
是一对“孪生兄弟”,只不过方向相反。
strftime()
是"string format time"的缩写,顾名思义,就是把时间格式化成字符串。

这在很多场景下都非常有用:比如你想把一个

datetime
对象显示给用户看,但用户可能更喜欢"2023年10月27日 星期五 下午02:30"这种中文格式;或者你需要把日期时间数据存入数据库或通过API传输,这时候通常需要一个统一的、机器可读的字符串格式,比如ISO 8601标准格式。

from datetime import datetime

# 假设我们有一个datetime对象
now = datetime.now()
print(f"当前的datetime对象: {now}")

# 格式化成常见的日志格式
log_format = "%Y-%m-%d %H:%M:%S"
log_string = now.strftime(log_format)
print(f"格式化为日志字符串: {log_string}")

# 格式化成中文显示格式
chinese_format = "%Y年%m月%d日 %H时%M分%S秒"
chinese_string = now.strftime(chinese_format)
print(f"格式化为中文字符串: {chinese_string}")

# 格式化为ISO 8601标准格式(通常用于API和数据交换)
iso_format = "%Y-%m-%dT%H:%M:%S" # 注意T分隔日期和时间
iso_string = now.strftime(iso_format)
print(f"格式化为ISO 8601字符串: {iso_string}")

# 还可以加入星期几、AM/PM等
full_display_format = "%Y-%m-%d %A %I:%M %p" # %A是完整的星期几名称,%I是12小时制小时,%p是AM/PM
full_display_string = now.strftime(full_display_format)
print(f"更详细的显示格式: {full_display_string}")

strftime()
的格式代码和
strptime()
是通用的,这大大降低了学习成本。理解了如何用
strptime
解析字符串,也就自然理解了如何用
strftime
生成字符串。这种双向转换的能力,是
datetime
模块在Python中处理日期时间数据时不可或缺的基石。在我的经验里,熟练掌握
strptime
strftime
,基本上就能应对绝大多数日期时间字符串的解析和格式化需求了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

463

2023.08.02

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

782

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

434

2024.06.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

624

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

633

2024.03.22

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号