Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将时间合并到DateTime以更新DateTime_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails 将时间合并到DateTime以更新DateTime

Ruby on rails 将时间合并到DateTime以更新DateTime,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,我需要在DateTime中更新时间信息 我得到一个格式为“14”或“14:30”的字符串(例如),因此我需要将其交给时间分析器以获得正确的时间。然后我需要更新self.start\u at这是一个已经有时间的日期时间,但我需要更新它 self.start_at_hours = Time.parse(self.start_at_hours) # example 14:30:00 # NEED TO UPDATE self.start_at which is a datetime 我在self上使

我需要在DateTime中更新时间信息

我得到一个格式为“14”或“14:30”的字符串(例如),因此我需要将其交给时间分析器以获得正确的时间。然后我需要更新
self.start\u at
这是一个已经有时间的日期时间,但我需要更新它

self.start_at_hours = Time.parse(self.start_at_hours) # example 14:30:00
# NEED TO UPDATE self.start_at which is a datetime

我在
self上使用了
change
方法。从
开始,但只需要
小时
分钟
,我不知道该怎么办。

你想过做这样的事情吗

time_to_merge = Time.new
date_to_merge = Date.today
merged_datetime = DateTime.new(date_to_merge.year, date_to_merge.month,
                               date_to_merge.day, time_to_merge.hour,
                               time_to_merge.min, time_to_merge.sec)

对于替换时间,应该使用
.change()
方法,如下所示:

my_datetime = my_datetime.change(hour: my_time.hour, min: my_time.min, sec: my_time.sec)
要添加时间,请尝试转换为秒,然后添加它们:

my_datetime += my_time.seconds_since_midnight.seconds

是的,它成功了。谢谢但我很惊讶,如果不创建一个新对象,就无法直接更改信息。。。这很傻,不是吗?(我来自Python,我喜欢优化资源)嗯?蟒蛇日期时间也是,不是吗?@steenslag不,你可以改变它的属性。为了方便起见,还存在一个
datetime.timedelta
,它表示两个日期/小时之间的差异。请@steenslag顺便说一句,我不是在说直接比较(不同PL之间存在差异是可以的,这就是为什么我们知道不同的PL),但在我看来,需要创建第三个对象而不是更改您已经拥有的对象似乎有点傻。@codeshing我想这有点傻,lol.因为我很早就遇到了这个问题,所以我开始只使用DateTime,其他值都为空,只显示需要的内容。这样我以后就可以改变主意了,只有显示器会有所不同;)很高兴我能帮忙:)