【问题标题】:Add 1 millisecond to a Time/DateTime object将 1 毫秒添加到 Time/DateTime 对象
【发布时间】:2017-02-06 09:13:55
【问题描述】:

有没有办法在 Ruby 中为 Time/DateTime 对象添加 1 毫秒?

对于 Web 服务请求,我需要一个以毫秒为单位的时间范围:

irb(main):034:0> time_start = Date.today.to_time.utc.iso8601(3)
=> "2016-09-27T22:00:00.000Z"

irb(main):035:0> time_end = ((Date.today + 1).to_time).utc.iso8601(3)
=> "2016-09-28T22:00:00.000Z"
-- or --
irb(main):036:0> time_end = ((Date.today + 1).to_time - 1).utc.iso8601(3)
=> "2016-09-28T21:59:59.000Z"

所以我接近我的首选解决方案,但 time_end 应该是 2016-09-28T21:59:59.999Z

我没有找到 Ruby 可以处理毫秒计算的解决方案。我只用strftime做的,如果有计算的可能就好了。

-- This works, but hard coded --
time_end = ((Date.today + 1).to_time - 1).utc.strftime("%Y-%m-%dT%H:%M:%S.999Z")
=> "2016-09-28T21:59:59.999Z"

仅供参考:我使用的是纯 Ruby,没有 Rails。

【问题讨论】:

  • “我没有找到 Ruby 可以处理毫秒计算的解决方案。” -- 这是当前时间戳,以毫秒为单位:Time.now.to_f
  • 我不想要当前毫秒,我想用它计算时间对象。我需要一个 1 天的范围开始和结束。并且在描述的iso格式中
  • 也许我的问题还不够清楚。有没有办法给时间/日期时间对象增加 1 毫秒?
  • 根据您的最新评论,我们现在知道这不是指定示例的副本。我已根据该评论编辑了问题。

标签: ruby time milliseconds


【解决方案1】:

好的,我找到了解决方案。经过实际计算,我看起来像。

time_end = ((Date.today + 1).to_time - 1/1001).utc.iso8601(3)
=> "2016-09-28T21:59:59.999Z"

示例

iso8601(3) 中的格式化只是为了显示行为。

irb(main):055:0> Date.today.to_time.iso8601(3)
=> "2016-09-28T00:00:00.000+02:00

增加一毫秒"

irb(main):058:0> (Date.today.to_time + 1/1000.0).iso8601(3)
=> "2016-09-28T00:00:00.001+02:00"

减去一毫秒

!DONT USE, see result with subtracted 2 milliseconds!
irb(main):060:0> (Date.today.to_time - 1/1000.0).iso8601(3)
=> "2016-09-27T23:59:59.998+02:00"

USE
irb(main):061:0> (Date.today.to_time - 1/1001.0).iso8601(3)
=> "2016-09-27T23:59:59.999+02:00"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多