Ruby使用变量解析DateTime

far*_*din 1 ruby datetime ruby-on-rails

我正在尝试解析特定日期的特定小时.当我直接将日期作为参数时,它可以正常工作,但是当我创建一个变量并将其放入参数时,它会返回当前日期.

这是为什么?

注:变量的时间9pm,我需要解析9pm12 March 2016.

datetime = DateTime.new(2016,3,12,9)
=> Sat, 12 Mar 2016 09:00:00 +0000

DateTime.parse("sat 12 march 2016 9pm")
=> Sat, 12 Mar 2016 21:00:00 +0000

DateTime.parse("datetime 9pm")
=> Mon, 14 Mar 2016 21:00:00 +0000
Run Code Online (Sandbox Code Playgroud)

Hél*_*tin 6

在第三次调用中,您使用文字字符串"datetime"而不是datetime变量的值.您可以使用字符串插值来使用变量的值:

DateTime.parse("#{datetime} 9pm")
Run Code Online (Sandbox Code Playgroud)

在这种情况下,"9pm"被忽略,因为它没有意义添加到现有日期的末尾,但这就是为什么初始尝试不起作用的原因.插值通常是使用变量值而不是名称的解决方案.

如果您的目标是更改现有日期的时间,请使用更改方法:

datetime.change(hour:21)
Run Code Online (Sandbox Code Playgroud)