如何理解strptime与strftime

nic*_*tme 32 ruby time

strptime和之间有什么区别strftime?我看到这strptimeDateTimestrftime中的一个方法,并且是类中的一个方法Time.

  1. 什么之间的区别TimeDateTime,除了它们有不同的核心方法?TimeRuby文档中对类的解释很有帮助,但DateTime只是说"datetime".还有一个Date类,它说它提供DateDateTime.帮助我理解这一点.
  2. 我看到了strptime,我想把它称为"剥离时间",但这没有意义.它有一个很好的助记设备吗?
  3. 什么strptimestrftime意思啊?
  4. 你怎么记得哪个做了什么?

tad*_*man 56

之间的差异Time,并DateTime有实现的事情.DateTime来自Rails世界,是一个随时间的任意日期.它更像是一个基于日历的系统.Time自UTC时间1970年1月1日起以秒为单位测量,与时区无关.在某些系统上,它仅限于1901和2038之间的值,这是传统上将该值存储为带符号的32位整数的限制,但较新版本的Ruby可以使用64位值或BigNum处理更宽的范围按要求.

简而言之,DateTime就是你从Rails中的数据库获得的东西,其中Time是Ruby传统上使用的.如果您正在处理日期很重要的值,并且您想知道诸如月末或未来六周之类的事情,请使用DateTime.如果您只是测量经过的时间而不关心它,请使用时间.如果有必要,它们之间很容易转换.

Date另一方面,它只是一个日历日期,没有任何相关的时间.您可能希望在时间不相关的地方使用这些.

strptime是"解析时间"的缩写,strftime用于"格式化时间".也就是说,尽管它们方便地使用相同的格式规范strptime,strftime但却是相反的.我很少看到strptime用过,因为DateTime.parse通常很擅长了解正在发生的事情,但如果你真的需要拼出它,一定要使用传统的解析器.

  • 你是个好人,@ tadman,[彻底](http://www.youtube.com/watch?v=NMwB5uIWOOI) (6认同)
  • 时间及其所有丑陋的细微差别是编写软件时您学得太多的事情之一。“一天有几秒钟?” 与“一只手拍手的声音是什么?”大致相同。 (2认同)
  • @aaron-coding 我不确定是否有任何文档本身。这直接来自具有相同名称的 C 库函数。长期以来,`f` 表示 *format* 的约定一直存在,它是 C 库的一部分,这里的 `p` 显然意味着 *parse*,即使没有明确描述。 (2认同)

小智 35

strptime表示字符串解析器,这会将字符串格式转换为日期时间。

例子:-

datetime.strptime('2019-08-09 01:01:01', "%Y-%m-%d %H:%M:%S")

datetime.datetime(2019, 8, 9, 1, 1, 1)//结果

strftime表示字符串格式化程序,这会将日期时间对象格式化为字符串格式。

例子:-

sample_date=datetime.strptime('2019-08-09 01:01:01', "%Y-%m-%d %H:%M:%S")

datetime.strftime(sample_date, "%Y-%d-%m %H:%M:%S")

'2019-09-08 01:01:01'//结果