gpt4 book ai didi

ruby - 无效日期 ArgumentError 和对有效日期的错误解析?

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:26 27 4
gpt4 key购买 nike

dates = ["11/12/08 10:47", "11/12/08 13:23", "11/12/08 13:30", 
"11/25/08 19:21", "2/2/09 11:29", "11/12/08 15:00"]

这会引发无效参数错误:

dates.each do |date|
d = Date.parse(date)
d.mon
end
#=> ArgumentError: invalid date

但取 dates 中的第一个日期,这是输出:

d = Date.parse('11/12/08 10:47')
puts d.mon
#=> #<Date: 2011-12-08 ((2455904j,0s,0n),+0s,2299161j)>
#=> 12 but this should be 11
  1. 在第一个示例中,为什么我会收到无效的 ArgumentError?
  2. 在示例 2 中,为什么用 monday 创建的 Date 对象交换了?

最佳答案

根据您的输入,Date.parse 正在解析您的日期,假设它们的格式为 YY/MM/DD,因此当它尝试解析 11/25/08 它失败了,因为 25 不是有效的月份:

d = Date.parse('11/12/08 10:47')
d.year
# => 2011
d.month
# => 12
d.day
# => 8

Date.parse('11/25/08 19:21')
# ArgumentError: invalid date

鉴于你的日期都是相同的格式,你应该使用 Date.strptime方法代替:

d = Date.strptime('11/12/08 10:47', '%m/%d/%y')
d.year
# => 2008
d.month
# => 11
d.day
# => 12

Date.strptime('11/25/08 19:21', '%m/%d/%y')
# => #<Date: 2008-11-25 ((2454796j,0s,0n),+0s,2299161j)>

编辑 可以使用快捷方式 %D 代替格式字符串 %m/%d/%y:

Date.strptime('11/25/08 19:21', '%D')
# => #<Date: 2008-11-25 ((2454796j,0s,0n),+0s,2299161j)>

关于ruby - 无效日期 ArgumentError 和对有效日期的错误解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23632023/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com