【问题标题】:Ruby Date Gem Invalid Date红宝石日期宝石无效日期
【发布时间】:2019-05-16 15:20:45
【问题描述】:

所以我正在遍历一个哈希值,其中一个键/值是 {date: => 'MM/DD/YYYY'}

当我遍历时,我使用日期 gem 来找出每个日期是一周中的哪一天,(0-6)。

要获取我当前所在索引的一周中的一天作为整数,以便我可以将其与另一个整数进行比较,其想法是检查索引的一周中的一天是否与索引的一天相同我正在寻找的那一周。

要获得该 int,我运行以下命令:

d = Date.parse(hash[i].values[2])
day_of_the_week = d.cwday

当我只为挑选的日期单独执行此操作时,效果很好,但我正在遍历哈希,我得到的是:

search.rb:25:in `parse': invalid date (ArgumentError)

对于特定日期“2017 年 9 月 13 日”。

“2017 年 9 月 13 日”有什么问题吗?为什么这实际上在其他日子有效(从 '9/5/17' 开始)然后在这一天随机卡住?

在我写这篇文章的时候,我做了一点挖掘,发现它到底是什么索引:

d = Date.parse(hash[4224].values[2])
day_of_the_week = d.cwday

给我同样的错误,我完全困惑,这是怎么回事?也不是 9/etc 中缺少 MM,因为每隔一个月都是一样的。

编辑:结果应该是 2,2017 年 9 月 12 日是星期二。

【问题讨论】:

  • 你能准确输出hash[4224].values[2] 给出的内容吗? Date.parse('9/13/17') 完全按预期工作。 Date.parse('9/13/17').to_s; #=> "09/13/2017"
  • hash[4224].values[2] 给出:'9/13/2017'
  • 你为什么希望它给你“09/12/2017”作为日期?还要确保您传递的是字符串,请检查 hash[4224].values[2].class 并查看它是否确实是字符串对象。
  • hash[4224].values[2].class 产生字符串。此外,打印出实际索引 [4224] 以获得更多上下文: {:parking_lot=>"Lot 1", :capacity=>68, :date=>"9/13/2017", :time=>"12 :00AM", :spots_taken=>6}。你有点明白我在挣扎什么吗?我不明白为什么会这样。这似乎是零意义
  • 代码的总体目标是查看这个哈希值,它包含(组成)过去一年中命名停车场的数据,每天的每个小时都有许多点被删除它的容量。我正在以特定的日期和时间遍历整个哈希,当我找到匹配项时,我将获取数据集每周的特定日期和时间的平均点数。这个想法是我输入现在的任何时间/日期,并猜测可能有多少个景点开放。所以当我解析时,我到了 2017 年 9 月 13 日,它抛出了这个错误。好奇怪

标签: ruby date parsing hash argument-error


【解决方案1】:

你需要传递你的日期格式,使用

Date.strptime('9/13/2017', '%m/%e/%Y').

【讨论】:

  • 是的,刚刚发现这个和 bam,没有冲突。非常感谢!
【解决方案2】:

我发现使用:

d = Date.strptime(hash[i].values[2], '%m/%d/%Y')

创建当前索引的日期对象是否优于:

d = Date.parse(hash[i].values[2].to_s)

替换就行了。

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多