当我想测试作业(job)是否在正确的时间排队时,我正在使用RSpec进行一些测试.为此,我将任务排在2.hours.from_now位,然后判断.at(2.hours.from_now)位.我很快意识到我的错误,并将其更改为修复测试的变量,但我意识到测试判断为at xxxx-xx-xx xx:xx:xx 721891/1048576 byte8576 +xxxx.现在,我想知道721891/1048576 byte8576到底是做什么的.我发现1048576 byteMebibyte.有没有可能末尾的分数仅仅是时刻的进一步精度,而不是x/1048576,而不是1048576,因为精度是2^20? 附加信息:使用的数据库为psql

推荐答案

如果亚秒的小数(小数)部分超过9位,Time#inspect似乎就是这样工作的:

Time.new(2022, 1, 1, 0, 0, 1/1_000_000_000r, 'UTC')
#=> 2022-01-01 00:00:00.000000001 UTC

Time.new(2022, 1, 1, 0, 0, 1/10_000_000_000r, 'UTC')
#=> 2022-01-01 00:00:00 1/10000000000 UTC

或者,如果它没有(有限的)十进制表示:

Time.new(2022, 1, 1, 0, 0, 2/3r, 'UTC')
#=> 2022-01-01 00:00:00 2/3 UTC

现在,我想知道721891/1048576到底是做什么的.

你的721891/1048576相当于~0.688秒,没有什么特别的意思.

有理数可能是将时间的浮点表示形式传回Time.at的结果:

t = Time.at(1640995200, 688449)
#=> 2022-01-01 01:00:00.688449 +0100

t.to_f
#=> 1640995200.688449

Time.at(1640995200.688449)
#=> 2022-01-01 01:00:00 721891/1048576 +0100

在Ruby中使用亚秒时,这是一个常见的错误.

Ruby-on-rails相关问答推荐

安装特定版本的Ruby时出现问题(OpenSSL问题)

RSpec系统测试无法从工厂访问新创建的记录

Rails6.1|有没有一种方法可以判断哪些关联已经加入到一个范围中?

为 has_attached_file 等活动记录属性创建类方法

Rails - 按连接表数据排序

验证以确保唯一性但忽略空值?

在一行中更改多个对象属性

基于 2 列定义唯一主键

Postgres on Rails 致命:数据库不存在

Rails ActiveRecord:验证单个属性

在 Windows 上安装特定的 Ruby on Rails 版本

使用 RSpec 2 关闭一个规范的事务性固定装置

表单中的第一个参数不能包含 nil 或为空 - Rails 4

过滤器在渲染之前但在控制器之后执行?

Mongoid OR 查询语法

rake db:回滚不起作用?

ArgumentError:ApplicationController 的副本已从模块树中删除,但仍处于活动状态

Ruby on Rails Bootstrap Glyphicons 不工作

未捕获的 ReferenceError:未定义 ReactDOM

为什么 rails bootstrap 这么慢,我该怎么办?