【问题标题】:Ruby strftime("%Q") broken?Ruby strftime("%Q") 坏了?
【发布时间】:2014-06-10 19:34:04
【问题描述】:

strftime docs 声称 %Q 有效:

%Q - Number of milliseconds since 1970-01-01 00:00:00 UTC.

但它为我返回“%Q”。

2.1.1 :054 > date = Time.now
 => 2014-06-10 12:28:57 -0700
2.1.1 :055 > date.strftime("%Q")
 => "%Q"

我正在使用 RVM 和 Ruby 2.1.1。

是我做错了什么,还是这是一个 Ruby 错误?

【问题讨论】:

  • %Q 未针对Time 对象列出,而是针对Date
  • Arup 是对的。您可以简单地使用 to_date 方法转换 Time 实例,然后使用 %Q 格式化标志。
  • 作为一条建议:在你认为你已经在核心库中发现了一个错误之前,深入研究文档总是好的,问问为什么应该工作的东西不起作用,并且,如果文档和您的代码看起来正确,那么 也许 认为这是一个错误。不过,在经过高度测试的库中发现错误的可能性很大。相反,错误将在绝大多数时间出现在您的代码中。但是,别担心,我们都至少做过一次。

标签: ruby


【解决方案1】:

您声明的是 Time 对象,而不是 DateDateTime 对象。 Time 的行为与 DateDateTime 的行为完全不同。

试试这个:

require 'date'
Date.today.strftime("%Q")

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    其他答案提到了如何使用 DateTime,但如果您更喜欢使用 Time 对象(例如因为Rubocop's default settings complain about using DateTime.now),那么这是等效的:

    Time.now.strftime("%s%L")

    %s 是自纪元以来的秒数,%L 是当前秒的毫秒数。

    【讨论】:

    • 这太棒了,正是我所需要的。我来这里也是因为 Rubocop 不喜欢to_datetime
    • 如果这么简单,为什么这不是时间的一部分?
    【解决方案3】:

    '%Q' 由 Date 和 DateTime 对象使用,而不是 Time 对象。你可以试试这个:

    require 'date'
    DateTime.now.strftime("%Q")
    

    require 'date'
    Date.today.strftime("%Q")
    

    【讨论】:

      【解决方案4】:

      您可以将时间对象转换为 DateTime,因为 %Q 仅由 Date 或 DateTime 使用

      Time.now.to_datetime.strftime('%Q')
      

      【讨论】:

        【解决方案5】:

        有一件事,没有提到答案,为什么你回来了"%Q"。你也可能得到错误,虽然指令不受支持,但你正试图通过。

        Time#strftime 明确提到了这一点 -

        指令以百分号 (%) 字符开头。 任何未列为指令的文本都将传递到输出字符串。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-08
          • 2013-11-17
          • 2011-01-14
          • 1970-01-01
          • 2013-04-10
          相关资源
          最近更新 更多