python datetime.datetime.now,Python datetime.now
即使是有经验的python用户,也经常会把datetime.strptime (string,format)写错,把两个参数的顺序颠倒过来写成datetime.strptime (format,string),与re.find(pattern,string)混淆。
分析问题
1、datetime.strptime()
首先strptime的功能不好命名,含义模糊,直接叫str2time比较好。是字符串源,时间是结果。
builtins.type实例的strptime(string,format)方法
string,format -从字符串解析的新日期时间(如time.strptime())
#案例
in[6]:datetime . strptime( 2019年5月8日, %d %B,%Y )
Out[6]: datetime.datetime(2019,5,8,0,0)
该函数解析一个字符串以产生一个时间对象。strptime的字面意思读起来像无意义的字符串解析时间,或者相反的意思解析时间产生一个字符串。折衷的处理方法被理解为对时间进行“字符串解析”。把strp当作组合名词,即strp2time。
与str2time相比,官方的strptime命名的优势在于动词parse的存在,指出函数内部逻辑的核心工作就是解析。把一个普通的字符串解析成一个有实用价值和意义的时间对象。(这更像是开发者在提醒自己,他们不是在给API的用户写信)
我们可以简单地扩展参数名:
datetime.strptime(字符串,格式)
#扩展到
def strptime(src_string,parsed _ format)- dst _ time _ object :
看来strptime还是符合源到目的的模式的。
混淆字符串和格式顺序的一个直接原因是re.match(pattern,str)的存在。按照模块re的思路,第一件事重要!看来strptime(string,format)的处理也要把format提到前面来。
对此的理解:
1)source到destination是约定,strptime(string,format)没有断。
2)regex突破常规,可能是因为consturct regex需要更多的脑力,而其他如time-format不需要太多思考。(regex的所有方法都将regex-pattern的构造作为第一个参数)
3)处理strptime,逐字引导直觉。strptime(字符串,解析格式)转换为时间对象
2、datetime.strftime()
混淆的另一个原因是strptime的反函数strftime。
strftime(格式)
format - strftime()样式字符串。
在[8]: dt
Out[8]: datetime.datetime(2019,5,8,0,0)
In [9]: dt.strftime(%d %B,%Y )
out[9]: 2019年5月8日
Strftime是time2str。
上面例子中的Datetime_obj.strftime(format)是其面向对象编程的编写方法。因为其中只有一个format参数,所以往往容易诱导python用户在strftime之前编写format。
strftime的函数表达式写如下
in[9]:datetime . strftime(datetime . now(), %b %d %Y %H:%M:%S )
out[9]: 2020年6月11日08时08分52秒
这样和strptime函数完全一致,两个参数都遵循src到dst的原则。
摘要
1,两者的共性。
使用strptime和strftime,直觉思维从动词入手,分别从parse和format入手,应用其函数式完全参数模式。思维链是:
parse -将src_string解析到dst_time
将src_time格式化为dst_string .
归纳起来有以下三点:
语法分析或格式分析
沿着src到dst
str[pf]时间序列不变。
2.特例和常规
除了re.search(pattern,src),还有一种不守规矩行为的特例。
先看字符串的str.split函数。
在[12]:“源到目的地”。拆分()
Out [12]: [source , to , destination ]# Follow source to destination,将src _ str转换为dst _ list。
但是,它的逆运算将输出结果放在前面。
在[13]:“”。联接([源,到,目标])
Out[13]:“源到目的地”
显然[源,到,目的]。Join( )更合理将src_list转换为dst_string
一种可能的解释是,Python将所有涉及string的操作集中在一个地方。
in[16]:len([m for m in dir(str)if not m . starts with( _ _ )])
Out[16]: 45
in[17]:len([m for m in dir(list)if not m . starts with( _ _ )])
Out[17]: 11
可以看到string str的方法是list的四倍多。
因此,我们区分特殊情况和常规情况:
Regex.find和str.join是特例,而strptime、strftime和str。分裂是一般情况。
3.系统的日期和时钟服务
花这么多笔墨分析strptime这个函数,是因为维护系统的时间是操作系统最核心的基础服务之一。
$ date -u
$ sudo hwclock -u
2019-05-08 20:19:14.764965 08:00
#str2time,strptime
$ date-d 2019年5月8日 %c
2019年5月8日星期三上午14:00:00(中部标准时间)
#time2str,strftime
$ date %d %B,%Y
2019年5月8日
#思路与strptime,strftime一致
希望这篇文章能给你一些启发和帮助。
来源网络,仅供学习,如有侵权,请联系删除。
学习Python必然会有困难。不要惊慌。我这里有一套学习资料,包括40本电子书和800个教学视频,内容涵盖Python基础、爬虫、框架、数据分析、机器学习等。我不怕你学不会!
https://shimo.im/docs/JWCghr8prjCVCxxK/《Python学习资料》
关注微信官方账号【Python圈子】,优质文章每日送。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。