2

我想在 Ruby 中获取当前时间的字符串:

"Time is " + Time.new.month + "/" + Time.new.day + "/" + Time.new.year

但它说“无法将 Fixnum 转换为字符串”。我怎样才能解决这个问题?

4

4 回答 4

4

或者你可以使用正确的工具来完成这项工作:时间格式化。

Time.new.strftime "Time is %m/%d/%Y" # => "Time is 11/13/2012"
于 2012-11-12T21:43:30.450 回答
3

你可以使用to_s

"Time is " + Time.new.month.to_s + "/" + Time.new.day.to_s + "/" + Time.new.year.to_s

但事件更好的是使用strftime

Time.new.strftime("Time is %-m/%e/%Y")
于 2012-11-12T21:41:00.563 回答
3

Ruby 只能将字符串添加到字符串中,因此需要进行转换。请注意,在双引号字符串中插入的元素会自动转换:

now = Time.new
"Time is #{now.month}/#{now.day}/#{now.year}"

也可以将它们从一个数组中组合起来,它们也会自动转换:

now = Time.new
"Time is " + [ now.month, now.day, now.year ].join('/')

您还可以使用sprintf-style 插值:

now = Time.new
"Time is %d/%d/%d" % [ now.month, now.day, now.year ]

第二个使您可以更好地控制格式。例如%02d将填充0到两个地方。

正如 Sergio 指出的那样,这种格式有一个特殊用途的函数,这可能是一个更好的主意。也是目前Time.now的传统方法,而用于创建任意时间。Time.new

于 2012-11-12T21:42:47.690 回答
1

只要有可能,最好使用字符串插值而不是串联。正如您在(线程)中清楚地看到的那样,使用字符串插值会自动to_s为您调用。

使用字符串插值:

“时间是 #{Time.new.month}/#{Time.new.day}/#{Time.new.year}”

于 2012-11-12T22:44:17.717 回答