- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在当前项目中比较 DateTime 时遇到了一段糟糕的时光(没有双关语意),特别是比较 ActiveSupport::TimeWithZone 的两个实例。问题是我的两个 TimeWithZone 实例具有相同的值,但所有比较都表明它们不同。
执行调试时暂停(使用RubyMine),可以看到如下信息:
timestamp = {ActiveSupport::TimeWithZone} 2014-08-01 10:33:36 UTC
started_at = {ActiveSupport::TimeWithZone} 2014-08-01 10:33:36 UTC
timestamp.inspect = "Fri, 01 Aug 2014 10:33:36 UTC +00:00"
started_at.inspect = "Fri, 01 Aug 2014 10:33:36 UTC +00:00"
然而比较表明值不相等:
timestamp <=> started_at = -1
我在搜索中找到的最接近的答案 ( Comparison between two ActiveSupport::TimeWithZone objects fails ) 在这里指出了同样的问题,我尝试了适用的解决方案但没有成功(尝试了 db:test:prepare 但我没有运行 Spring)。
此外,即使我尝试转换为显式类型,在比较时它们仍然不等价。
到_时间:
timestamp.to_time = {Time} 2014-08-01 03:33:36 -0700
started_at.to_time = {Time} 2014-08-01 03:33:36 -0700
timestamp.to_time <=> started_at.to_time = -1
截止日期:
timestamp.to_datetime = {Time} 2014-08-01 03:33:36 -0700
started_at.to_datetime = {Time} 2014-08-01 03:33:36 -0700
timestamp.to_datetime <=> started_at.to_datetime = -1
到目前为止,我发现的唯一“解决方案”是使用to_i
转换两个值,然后进行比较,但这对于我想在任何地方编写代码都非常尴尬比较(而且,似乎应该是不必要的):
timestamp.to_i = 1406889216
started_at.to_i = 1406889216
timestamp.to_i <=> started_at.to_i = 0
如有任何建议,我们将不胜感激!
最佳答案
正如上面 Jon Skeet 所指出的,由于时间上隐藏的毫秒差异,比较失败了:
timestamp.strftime('%Y-%m-%d %H:%M:%S.%L') = "2014-08-02 10:23:17.000"
started_at.strftime('%Y-%m-%d %H:%M:%S.%L') = "2014-08-02 10:23:17.679"
这一发现使我走上了一条奇怪的道路,最终发现了导致问题的最终原因。这是仅在测试期间和使用 MySQL 作为我的数据库时发生的问题的组合。
问题仅在测试中出现,因为在出现此问题的测试中,我正在针对包含上述字段的几个关联模型运行一些测试。一个模型的实例必须在测试期间保存到数据库中——包含 timestamp
值的模型。然而,另一个模型正在执行处理,因此正在自引用在测试代码中创建的自身实例。
这导致了第二个罪魁祸首,即我使用 MySQL 作为数据库,当存储 datetime
值时,不存储毫秒信息(不像,比如 PostgreSQL)。
不变的是,这意味着从 MySQL 数据库检索到其 ActiveRecord 后读取的 timestamp
变量实际上被四舍五入并去除了毫秒数据,而 started_at
变量在测试期间仅保留在内存中,因此原始毫秒数仍然存在。
我自己的(低于标准)解决方案基本上是在我的测试中强制两个模型(而不是一个)从数据库中检索它们自己。
TLDR;尽可能使用 PostgreSQL!
关于ruby-on-rails - rails/ ruby : TimeWithZone comparison inexplicably failing for equivalent values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078772/
我需要一个正则表达式,它只会选择那些不以 .png 或 .css 等特定扩展名结尾的 URL 字符串。 我测试了以下内容: 1)这个使用负回顾: (? SetHandler "proxy:un
我似乎无法确切地掌握名称的等效性。我很确定我的结构已经下降。我的教授给出的一个例子是: Type TI=integer Type TTI=TI a=integer b=TTI f= ref
我最近为问题“A Regex that will never be matched by anything ”( my answer here ,请参阅更多信息)计时了一堆正则表达式。 然而,在我测试
Clojure 为 提供方法懒惰评估 (无限)序列中的值。有了这个,值只会在它们被实际消耗时计算。 一个重复元素的无限序列示例: (take 3 (repeat "Hello StackOverflo
如果我使用文本文件在 Solr/Lucene 中定义同义词,如下所示: foo, bar, goo abc, bar, xyz 字bar在两条线上。 这是否意味着 Solr 将所有术语都视为同义词,因
在 Xcode 中,当您设置键盘快捷键时,有一个很好的控件可以帮助您: 我觉得我可以通过扩展 NSTextField 来重现它,但我也觉得这可能是其他人以前做过的事情。我做了一些搜索,但没有找到任何结
我对汇编语言有点陌生,很难理解术语“字节等效”。 它用于以下上下文:- MOV 指令有时会引起歧义。例如,查看以下语句: MOV EBX, [MY_TABLE] ; Effective Addre
这是一个“软性问题”,因此,如果此发布地点不合适,请告诉我。 本质上,我想知道如何谈论在某种意义上“等效”而在另一些意义上“不同”的算法。 这是一个玩具示例。假设我们得到了一个长度为list的数字n的
我(在 Protege 中)定义了一个 Missing 类,它相当于 ((not (atHome value 30)) and (not (atWork value 30)))and (not (on
我正在处理一个烦人的数据库,其中一个字段包含真正应该存储在两个单独字段中的内容。因此该列存储的内容类似于“第一个字符串~@~第二个字符串”,其中“~@~”是分隔符。 (再说一次,我没有设计这个,我只是
在 Django 中,这两个是等价的吗? Cars.objects.exclude(brand='mercedes').exclude(year__lte=2000) 和 Cars.objects.e
此代码行选择任何类名不是“id”和“quantity”的 div 内的所有子输入:: $("div.item > div:not(.id,.quantity) > :input").live("key
在 Vue 1.x 中,我使用以下指令直接选择一个节点。 然后: this.$els.visibleColumns 是否有 Vue 2.x 方法来做到这一点? 最佳答案 当然,所以它已被 ref/$
我在underscore.js源码中看到了这段代码: if ((!a && b) || (a && !b)) return false; 这是否等同于以下内容? if (a ^ b) return f
我需要一些关于批处理文件中 grep -v Wildcard 和 grep -o 的等效代码的帮助。 这是我在 shell 中的代码。 result=`mysqlshow --user=$dbUser
我试图在 SQL 中找到等同于 IN\NOT 的 ElasticSearch 查询。 我知道我们可以使用带有多个 OR 的 QueryString 查询来获得相同的答案,但最终会得到很多 OR。 谁能
On a separate post , 我在帮忙George Edwards使用 BLE API 分解一些代码. 我很确定我发布的代码(使用分解模板)与原始代码相同。但是当 George 将它发送到
是否有办法“模仿”background-size:cover; 的行为? (参见 http://www.w3schools.com/cssref/playit.asp?filename=playcss
我正在使用 Qt。我需要直接向我的打印机写入一些文本。在 Windows 上,我可以使用 winapi OpenPrinter 和 WritePrinter 执行此操作,但我需要此代码才能在 linu
我搜索过并使用过 UIDevice.currentDevice().instancesRespondToSelector(Selector("userInterfaceIdiom")) 但对我不起作用
我是一名优秀的程序员,十分优秀!