python datetime.datetime.now,Python datetime.now

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: