0

0

python如何将字符串转换为datetime对象_python字符串与datetime对象的相互转换

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-09-12 18:31:01

|

1056人浏览过

|

来源于php中文网

原创

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

python如何将字符串转换为datetime对象_python字符串与datetime对象的相互转换

Python中将字符串转换为

datetime
对象,核心在于
datetime
模块的
strptime()
方法;反之,将
datetime
对象格式化为字符串,则使用
strftime()
方法。这两种转换都依赖于精确的格式代码,确保输入与输出的模式匹配。

在Python日常开发中,处理日期和时间几乎是家常便饭。我发现,最常见且直接的方式就是使用内置的

datetime
模块。它提供了
strptime()
(string parse time)函数,顾名思义,就是从字符串解析时间。你需要告诉它你的字符串长什么样,比如“2023-10-27 10:30:00”这种,然后提供一个对应的格式字符串,比如
"%Y-%m-%d %H:%M:%S"
。如果格式对不上,Python会毫不留情地抛出
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免费学习笔记(深入)”;

Python中如何将datetime对象格式化为特定字符串?

datetime
对象转换回字符串,通常是为了展示、存储到数据库或者作为API响应。这比字符串转
datetime
要“舒服”得多,因为你完全掌控了输出的格式。我们使用
datetime
对象的
strftime()
(string format time)方法,它也需要一个格式字符串作为参数,来告诉Python你希望日期时间以何种形式呈现。

比如,你可能希望日期是“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 AM

strftime()
的灵活性在于你可以用各种格式代码组合出你想要的任何字符串样式。我经常用它来生成日志文件名,或者在网页上显示用户友好的时间戳。它几乎不会出错,只要你提供的格式代码是有效的,它就能给你一个字符串。

Python字符串转datetime时常见的陷阱与错误处理?

在将字符串转换为

datetime
对象时,我遇到过最多的问题就是
ValueError
。这通常是因为:

  1. 格式不匹配:这是最常见的。比如你的字符串是
    "2023-10-27"
    ,但你用了
    "%Y/%m/%d"
    去解析,斜杠和横杠不一致,就报错了。
  2. 非法日期:比如尝试解析
    "2023-02-30"
    (二月没有30号),这也会导致
    ValueError
  3. 时区信息:如果字符串中包含时区信息,比如
    "2023-10-27T10:30:00+08:00"
    ,而你的格式字符串没有相应地处理时区(例如
    %z
    ),也会有问题。

为了让代码更健壮,尤其是在处理用户输入或外部数据时,我强烈建议使用

try-except
块来捕获这些潜在的
ValueError

AItools.fyi
AItools.fyi

找到让生活变得更轻松的最佳AI工具!

下载
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
模块。它非常智能,能够猜测日期字符串的格式,但我也提醒自己,过度依赖这种“猜测”有时会带来意想不到的错误,尤其是在数据模糊不清时。它可能把"01/02/2023"解析成1月2日,也可能是2月1日,这取决于它的内部逻辑和默认设置。所以,如果能明确格式,还是尽量明确。

在Python中进行大量日期时间转换时,如何优化性能?

当我处理大量数据,比如从CSV文件读取成千上万行带有日期时间字符串的数据时,性能就成了我必须考虑的问题。反复调用

strptime()
可能会成为瓶颈。

  1. 预编译格式字符串

    strptime()
    在每次调用时都需要解析格式字符串。如果你在循环中反复使用同一个格式字符串,Python可能会在内部重复做一些工作。虽然Python解释器通常会做一些优化,但如果性能要求非常高,可以考虑其他方法。不过,对于大多数应用来说,
    strptime()
    的性能已经足够了。

  2. 使用

    datetime.fromisoformat()
    处理ISO 8601格式:如果你的日期时间字符串是标准的ISO 8601格式(例如
    "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}")

    它甚至能处理微秒,非常方便。

  3. 利用

    pandas
    库进行批量转换:如果你的数据量真的很大,并且已经在使用
    pandas
    处理数据,那么
    pandas
    提供了一个非常高效的
    pd.to_datetime()
    函数。它不仅速度快,还能智能地处理多种日期格式,甚至可以并行处理,并且能方便地处理错误(例如,将无法解析的日期转换为
    NaT
    ,即"Not a Time")。

    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速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

773

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

684

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

765

2023.07.25

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

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

719

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1425

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

570

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

751

2023.08.11

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

25

2026.01.23

热门下载

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

精品课程

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

共4课时 | 19.2万人学习

Django 教程
Django 教程

共28课时 | 3.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

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

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