string转换为datetime_#PY小贴士# 在时间与字符间转换

今天是 2019 年的最后一天。很多人都在这个特殊的日子总结过去的一年,计划新的一年。

那我们今天就来讲一讲 Python 里与时间有关的事:

如何将时间类型(datetime)字符串类型(str)进行相互转换

这个需求在实际开发中非常常见。比如我们后台拿到的时间要在界面上显示;或者用户输入了时间,需要进行计算及保存。Python 中可以实现的方法也不止一种,其中最常见的是 strftime() strptime()这两个相对的函数。

datetime.strptime(date_string, format)

这里的 p 表示 parse(也有认为是 pointer 的意思),意为 str -> time,也就是“从字符转到时间”的意思。参数 date_string 表示时间的字符串,format 是设定转换的格式,返回值是时间类型。

代码示例:

>>> import datetime>>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")>>> dtdatetime.datetime(2006, 11, 21, 16, 30)

datetime.strftime(format)

这里的 f 表示 from,意为 str 从时间转到字符”的意思。参数 format 是设定转换的格式,返回值是字符串。

代码示例:

>>> dt.strftime("%A, %d. %B %Y %I:%M%p")'Tuesday, 21. November 2006 04:30PM'

注意:这两个都是 datetime 模块里的方法,但区别是,strptime 是类方法,由 datetime 类来调用;strftime 是实例方法,由一个具体的 datetime 对象来调用。

它们用到的格式化字符标记都是一致的,我们在这里也给大家列出来供参考。

附:格式化的具体代码说明

指令

意义

示例

%a

当地工作日的缩写。

Sun, Mon, ..., Sat (en_US);

So, Mo, ..., Sa (de_DE)

%A

本地化的星期中每日的完整名称。

Sunday, Monday, ..., Saturday (en_US);

Sonntag, Montag, ..., Samstag (de_DE)

%w

以十进制数显示的工作日,其中0表示星期日,6表示星期六。

0, 1, ..., 6

%d

补零后,以十进制数显示的月份中的一天。

01, 02, ..., 31

%b

当地月份的缩写。

Jan, Feb, ..., Dec (en_US);

Jan, Feb, ..., Dez (de_DE)

%B

本地化的月份全名。

January, February, ..., December (en_US);

Januar, Februar, ..., Dezember (de_DE)

%m

补零后,以十进制数显示的月份。

01, 02, ..., 12

%y

补零后,以十进制数表示的,不带世纪的年份。

00, 01, ..., 99

%Y

十进制数表示的带世纪的年份。

0001, 0002, ..., 2013, 2014, ..., 9998, 9999

%H

以补零后的十进制数表示的小时(24 小时制)。

00, 01, ..., 23

%I

以补零后的十进制数表示的小时(12 小时制)。

01, 02, ..., 12

%p

本地化的 AM 或 PM 。

AM, PM (en_US);

am, pm (de_DE)

%M

补零后,以十进制数显示的分钟。

00, 01, ..., 59

%S

补零后,以十进制数显示的秒。

00, 01, ..., 59

%f

以十进制数表示的毫秒,在左侧补零。

000000, 000001, ..., 999999

%z

UTC 偏移量,格式为 ±HHMM[SS[.ffffff]] (如果是简单型对象则为空字符串)。

(空), +0000, -0400, +1030, +063415, -030712.345216

%Z

时区名称(如果对象为简单型则为空字符串)。

(空), UTC, EST, CST

%j

以补零后的十进制数表示的一年中的日序号。

001, 002, ..., 366

%U

以补零后的十进制数表示的一年中的周序号(星期日作为每周的第一天)。 在新的一年中第一个星期日之前的所有日子都被视为是在第 0 周。

00, 01, ..., 53

%W

以十进制数表示的一年中的周序号(星期一作为每周的第一天)。 在新的一年中第一个第期一之前的所有日子都被视为是在第 0 周。

00, 01, ..., 53

%c

本地化的适当日期和时间表示。

Tue Aug 16 21:30:00 1988 (en_US);

Di 16 Aug 21:30:00 1988 (de_DE)

%x

本地化的适当日期表示。

08/16/88 (None);

08/16/1988 (en_US);

16.08.1988 (de_DE)

%X

本地化的适当时间表示。

21:30:00 (en_US);

21:30:00 (de_DE)

%%

字面的 '%' 字符。

%

文档地址:

https://docs.python.org/zh-cn/3.8/library/datetime.html#strftime-and-strptime-format-codes


#PY小贴士#里,我们会分享一些 python 知识点、开发中的小技巧、容易踩到的坑,以及学员遇到并在群里提到真实问题。篇幅尽量短小,适合碎片时间阅读,欢迎关注!

如果你在编程学习中有疑问,可选择以下方式向我们提问:

1. 加入码上行动答疑群(最及时响应)

2. 加入知识星球 https://t.zsxq.com/IiAiiQj

3. 发微博加上 #编程教室# 并 @Crossin(非私信)

提问时请表述清楚,附上必要代码、输出等截屏。

也可向本栏目投稿,分享你开发中的经验。采纳后将署名发表,并可附上个人博客、公众号、Github等介绍。


1459e03294dd0f211b9cc03b1e5abfbe.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值