ActiveSupport::TimeWithZone#to_date 返回错误日期

2024-05-12

我想要以下实例的日期部分ActiveSupport::TimeWithZone。我用了to_date函数,但它返回前一天的日期。

例如,如果日期时间是2012-04-11 09:05:00 UTC,如果我打电话to_date然后它返回2012-04-10 but 2012-04-11.

另外我没有使用特定时区(默认为 UTC)

该应用程序正在运行Ruby 1.8.7 and Rails 3.0.2

谁能告诉我为什么它给出了错误的日期?另外请建议我是否有更好的方法来获取日期(例如Date) 给定的部分DateTime(实例ActiveSupport::TimeWithZone)

EDIT: 有人也在这里面临同样的问题http://pastebin.com/sn8ExZiQ http://pastebin.com/sn8ExZiQ

NOTE : Time.zone回报'UTC'


Thanks Jignesh https://stackoverflow.com/users/936494/jignesh。在这里,我分享您的发现和解决方案。

可能有一些宝石是压倒一切的to_date实现,它可能会被错误地实现,并且可能会调用这个覆盖的版本。

就我而言,罪魁祸首是ruby-units gem

根本原因 : ruby-unitsgem 包含在应用程序的 Gemfile 中

问题分析 :

Gemfile

# Ruby-units overrides String class #to method, hence placed before Rails
gem "ruby-units" # Loads first and then rails is loaded

gem "rails", "3.0.11"

..
..

time.rb 文件(ruby-units gem 代码库)

..
..

unless Time.instance_methods.include?(:to_date)
    # :nocov_19:
    # @return [Date]
    def to_date
     x=(Date.civil(1970,1,1)+((self.to_f+self.gmt_offset)/86400.0)-0.5)
     Date.civil(x.year, x.month, x.day)
    end
    # :nocov_19:
end

..
..

假设当前时间在UTC时区是Wed, 11 Apr 2012 10:12:17 UTC +00:00表示为ActiveSupport::TimeWithZone实例。 当我们执行时,来自 Rails 应用程序<TimeWithZone>.to_date它返回 一个约会2012-04-10这是不正确的。

上述错误行为的罪魁祸首是执行to_date方法 由...提供ruby-units gem

下面是一个示例程序来演示上述不正确的行为。这to_date方法与实现的方法相同ruby-unitsgem,除了将参数添加到方法中之外,即date_timeself在实现中被参数替换 '约会时间'。

用于确认上述发现的示例 Ruby 程序:

require 'rubygems'
require 'active_support/all'

class TestDT
 def to_date(date_time)
     #x=(Date.civil(1970,1,1)+((self.to_f+self.gmt_offset)/86400.0)-0.5)
     x=(Date.civil(1970,1,1)+((date_time.to_f+date_time.gmt_offset)/86400.0)-0.5)
     Date.civil(x.year, x.month, x.day)
 end
end

tdt = TestDT.new
utc_time = Time.now.in_time_zone('UTC')
puts tdt.to_date(utc_time)

输出(撰写本文时的日期是星期三,11 Apr 2012 08:35:12 UTC +00:00):

$ ruby test_date_time.rb
2012-04-10

解决方案:

  1. 去除ruby-units宝石来自Gemfile或者在 Rails gem 之后加载它
  2. 解决方法:而不是执行datetime.to_date , use datetime.to_s.to_date
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ActiveSupport::TimeWithZone#to_date 返回错误日期 的相关文章

随机推荐

  • Python字典:keys()和values()总是相同的顺序吗?

    看起来像返回的列表keys and values 字典的方法始终是一对一的映射 假设字典在调用 2 个方法之间没有更改 例如 gt gt gt d one 1 two 2 three 3 gt gt gt k v d keys d valu
  • 使用 CSS3 反转进度条

    我有这个EXAMPLE http jsfiddle net Mils fmaGZ 1 我想将进度条反转 180 度 从右向左进行 要获得这样的东西 我试图改变过渡属性但没有结果 Code progress bar span display
  • MySQL 连接不工作:2002 没有这样的文件或目录

    我正在尝试设置 WordPress 我已经运行了 Apache 和 MySQL 并且帐户和数据库都已设置 我尝试建立一个简单的连接 我总是得到这个 错误 2002 没有这样的文件或 目录 它正在谈论什么文件或目录 我使用的是 OS X Sn
  • Kotlin 中的单例类

    我想知道如何在 Kotlin 中创建一个单例类 以便我的 Util 类在每次应用程序执行时仅实例化一次 但是 当我将 Java 类转换为 kotlin 时 生成了以下代码 它是否正确 companion object private var
  • Android CirclePageIndicator 不工作

    我无法使用 CirclePageIndicator 加载页面 这是 XML
  • Spring IO 这个名字是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 2013 年秋季 Spring 推出了新网站 spring io http spring io 并宣布了其新平台 弹簧IO http sp
  • Tess4j 问题 java.lang.UnsatisfiedLinkError

    我正在尝试解决 Tess4J 安装问题 1 我在 WEB INF win32 x86 中创建了一个文件夹2 我把 libtesseract302 dll 和 liblept168 dll 放在那里 然后将其添加到 java 构建路径中的源
  • 如何在iPhone中制作UIButton垂直滑块菜单

    在我的应用程序中 我想制作带有滚动视图的 UIButton 滑块 其中当我们滚动按钮的 uiscrollview 时 按钮将位于中心 请参阅这些应用程序的第一个屏幕 sothttp itunes apple com au app id422
  • 从不同的插件执行现有插件的命令/处理程序

    我有一个 RCP 应用程序 其中包含现有命令和处理程序 可以通过编程方式切换视角 我还有现有 RCP 应用程序使用的新插件 我希望这个新插件执行我的 RCP 应用程序的命令 处理程序 可能的解决方案是什么 您可能需要为该命令定义一个处理程序
  • 如何通过编码来点击按钮?

    我的程序中有两个按钮 我希望当我按下第一个按钮时 会自动单击第二个按钮 在第一个按钮的事件处理程序中 我想通过编码按下第二个按钮 private void button1 Click object sender EventArgs e pa
  • Android x86_64 和 x86 模拟器在 AlertDialog.onClick 事件上崩溃

    我正在 x86 64 和 x86 模拟器中测试 Android 应用程序 在从显示列表的 AlertDialog 中选择一个项目后 它崩溃了 Android 模拟器意外关闭 AlertDialog 是从 AppCompatActivity
  • 异步protobuf序列化

    protobuf net 实现的一个限制是它同步调用底层流 通过不提供异步 API 例如BeginSerialize EndSerialize 或 TPL 等效项 我们被迫占用一个等待同步流 I O 的线程 是否有计划在 protobuf
  • 我无法在剃刀视图中设置断点

    我知道可以在 MVC Razor 视图中设置断点 但出了点问题 它不再工作了 我尝试重新启动 Visual Studio 2013 并更改调试的一些选项 你有什么建议吗 感谢弗拉基米尔 我能找到解决方案 我必须清理并重建整个解决方案 我之前
  • 如何在azure上托管和部署ASP.Net core 2.0 web api?

    我在 Visual Studio 2017 中创建了一个解决方案 其中创建了以下项目 客户端 使用核心 2 1 的 Angular 模板 服务器 使用 core 2 0 的 web api 因为我是在天蓝色上部署我的应用程序的新手 因此 通
  • Magento 一页结帐 - 出现 TypeError: checkout undefined (在 opcheckout.js 中)

    大约一周前 一页结帐工作正常 但现在不行了 毫无疑问我有错 因为我仍然遇到与管理后端相关的问题 并且我可能在处理该问题的过程中以某种方式搞砸了 无论如何 当 登录 注册 用户单击一页结账的帐单信息步骤中的 继续 按钮时 会发生什么情况 就好
  • 用于大括号突出显示的背景和前景色

    当前的功能只是勾勒出很难看到的匹配支架的轮廓 我如何更改前景色和背景色 以便匹配的大括号出现在实心块上 阿普塔纳工作室 3 这是 Aptana 从 Eclipse 继承的东西 它被硬编码为在匹配对字符周围绘制一个矩形 因此 不幸的是 这不是
  • 快速求解子集和

    考虑这种解决子集和问题的方法 def subset summing to zero activities subsets 0 for activity cost in activities iteritems old subsets sub
  • CC2538 的 Contiki UDP 数据包传输持续时间

    有人可以解释一下 Contiki OS 传输 UDP 数据包时发生了什么吗 以下是我的设备使用 CC2538 芯片运行时的详细电流消耗 我的问题是 既然理论上在 250kbps 下 408 位长度的数据包应该在大约 2ms 内传输 为什么要
  • 以 png 格式剪辑幻灯片 (Delphi 2010)

    I have a filmstrip of images in png format like this 我想知道如何剪辑每个图像并将这些图像放入 TImageList 控件中 并始终保留透明度 EDIT 是的 在设计时 RRUZ 提到的技
  • ActiveSupport::TimeWithZone#to_date 返回错误日期

    我想要以下实例的日期部分ActiveSupport TimeWithZone 我用了to date函数 但它返回前一天的日期 例如 如果日期时间是2012 04 11 09 05 00 UTC 如果我打电话to date然后它返回2012