当前位置: 首页 > 知识库问答 >
问题:

内存中的时间和数据库中的时间:错误还是功能?

朱季
2023-03-14

我最近发现了这种奇怪的行为,它涉及实例化一个时间对象(例如,使用Time.now),然后使用其值进行算术运算,最终将返回一个整数。我的用例如下:

我实例化了一个时间:

time = 3.days.from_now

然后我用它来知道从现在到那个时间的秒数:

now = Time.now
diff = time - now #=> returns an Integer

现在,我将该时间存储在数据库中(假设一个类似ActiveRecord的实例,它将在DATETIME列中存储时间):

a.date = time
a.save

现在到了最棘手的部分:

a.reload
time2 = a.date
diff2 = time2 - now #=> returns an Integer
diff == diff2

最后一个断言有时是错误的,其他的是正确的。事实是,当实例化Time对象时,用于时间算术运算的值包含高达纳秒和微秒的精度,这将在“-”运算的结果值中考虑。但是当它被存储时,“微精度”被留下,当存储在数据库中的时间被加载时,它没有纳秒或微秒。因此,它本质上不同于我之前分配给该对象属性的时间实例。这打乱了我的差分计算。

因此,问题将是:如果时间实例最终被存储,我如何从时间实例化,使实例的精度只达到秒,并因此等同于从db获取的时间?我更喜欢独立于ActiveSupport的解决方案,尽管AS-建议也是受欢迎的。目标是:diff必须始终等于diff2。

共有1个答案

刘永望
2023-03-14

如果您只需要将一个< code >时间缩短到一秒,您可以这样使用,例如:

t = Time.at(Time.now.to_i)

而不是Time.now

编辑:刚刚注意到<code>时间#round

t = Time.now.round

也应该这样做。

 类似资料:
  • 日志条目:10:25 运营:08:25

  • 问题内容: 我通过使用将JodaTime 字段存储到列中。应用服务器的时区为+4。数据库服务器+9时区。会导致+9是时区(正确值为)。 我还没有找到任何相关主题。正确存储。 域对象具有以下映射属性: 如何正确存储DateTime? 问题答案: 好。我已经花了8个小时来解决问题。如果您使用用户类型项目来保留JodaTime,则必须将class 属性设置为等于当前应用程序服务器时区(不是数据库!)。

  • 我的数据存储在数据库中,我使用来显示数据。 在中,一切看起来都应该如此,但在中,日期显示得应该如此。这两个类型实际上并不重要,但类型看起来像一个实际上是一个。 如何才能正确显示? 元数据库:

  • 问题内容: 此处通常建议添加索引,以解决性能问题。 (我只在说阅读和查询,我们都知道索引会使写入变慢)。 多年来,我已经在DB2和MSSQL上尝试了很多方法,结果总是令人失望。 我的发现是,无论索引有多“明显”,它都会使事情变得更好。事实证明,查询优化器更智能,而我的明智选择的索引几乎总是使事情变得更糟。 我应该指出,我的经验主要与小型表(<100‘000行)有关。 谁能提供一些切实可行的索引选择

  • < code >在此输入代码我在android应用程序中有一个注册表,用户可以在其中输入他们的详细信息。我尝试将数据存储到firebase中,数据正在存储,但问题是电话号码、年龄和姓名都将被存储。如何解决这个问题?请帮帮忙! 助手类 公共类UserHelperClass { } 数据存储到Firebase代码 从其他活动获取数据 将数据传递给另一个活动 公共类注册活动扩展了应用程序兼容性活动 {

  • 问题内容: 我只是在想,是否可以使用Swift将时间存储在Firebase中?我之所以问是因为我要创建一个应用程序,当我创建一个特定的对象时,该对象将启动一个计时器,该计时器从创建之日起24小时开始递减计数。这24小时到期后,该对象将被删除。我还想显示一个倒数计时器,以显示该对象在删除之前还剩下多长时间。 我尝试将小时和分钟作为整数存储到数据库中,但这似乎效率不高,因为我不得不担心AM / PM,