Python3 - 字符串转换为日期

问题

将字符串日期,转换为 datetime 对象以便在上面执行非字符串操作。

解决方案

使用Python的标准模块 datetime 可以很容易的解决这个问题。比如:

from datetime import datetime

text = '2018-11-21'

a = datetime.strptime(text, "%Y-%m-%d").date()
b = datetime.today().date()
diff = b - a

print(a)
print(b)
print(diff)

2018-11-21
2018-12-21
30 days, 0:00:00

讨论

datetime.strptime() 方法支持很多的格式化代码, 比如 %Y 代表4位数年份, %m 代表两位数月份。 这些格式化占位符也可以反过来使用,将日期输出为指定的格式字符串形式。

将一个 datetime 对象, 格式化为漂亮易读形式的字符串,可以使用datetime.strftime()。比如:

c = datetime(2018, 12, 23, 21, 37, 4, 177393)
nice_c = datetime.strftime(c, '%A %B %d, %Y')
print(c)
print(nice_c)

2018-12-23 21:37:04.177393
Sunday December 23, 2018

需要注意的是,strptime()的性能比想象中的差很多, 因为它是使用纯Python实现,并且必须处理所有的系统本地设置。

如果代码中需要解析大量的日期,并且已经知道了日期字符串的确切格式,可以自己实现一套解析方案来获取更好的性能。 比如,已知日期格式是 YYYY-MM-DD ,可以像下面这样实现一个解析函数:

from datetime import datetime

def parse_ymd(s):
    year_s, mon_s, day_s = s.split('-')
    return datetime(int(year_s), int(mon_s), int(day_s))

print(parse_ymd('2018-12-20'))

2018-12-20 00:00:00

实际测试中,这个函数比 datetime.strptime() 快7倍多。 如果需要处理大量的涉及到日期的数据,建议最好考虑下这个方案。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   曾几何时,我们中的一个人(Lacey)盯了一个多小时的python文档中描述日期和时间格式化字符串的表格。当我...
    编程自习室阅读 3,987评论 0 2
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,452评论 0 4
  • 很多同学在寻找兼职的过程中,遇到的最大问题可能就是不知道真正靠谱的好兼职藏在哪里。自己不管在QQ群还是微信群看到的...
    何泽宇阅读 43,809评论 4 40
  • 分享了二八法则,百分之八十的财富掌握在百分之二十的手上,然而那百分之二十的人比那百分之八十的人还要勤奋。百分之二十...
    BossYY阅读 1,085评论 0 0
  • 今天我想起来以前戴老师跟我们讲的记住一个字的方法,戴老师给我们举的例子是“聪”字的记法:“聪”字拆开来看就是左边一...
    刘誉天爸爸阅读 3,633评论 0 0