ruby - 将 1 毫秒添加到时间/日期时间对象

标签 ruby time milliseconds

有没有办法将 1 毫秒添加到 Ruby 中的时间/日期时间对象?

对于 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。

最佳答案

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

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"

关于ruby - 将 1 毫秒添加到时间/日期时间对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39746672/

相关文章:

ruby-on-rails - 判断 gem 是否被调用为 Rake 任务

ruby-on-rails - 添加两个 ruby​​ 数组

c++ - Eclipse C++ 错误

c# - 如何获得与 Thread.Sleep 支持 double 值类似的结果?

ruby - 向继承自 Hash 的 Ruby 类添加类似 'each' 的方法

ruby-on-rails - Zeitwerk:将 engine/gem 目录添加到父 Rails 应用程序的自动加载路径

C++ 字符串到 int 值

android - 简单地将 java.util.Calendar 转换为 Android 时间

MongoDB:将日期字符串 (mm/dd/yyyy) 转换为 Unix 时间戳

c# - 在循环中计算 DateTime.Now.Millisecond - C#