2012-11-12 44 views
2

我想要得到的當前時間的字符串在Ruby中:Fixnum對象字符串轉換

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

但它說:「不能轉換爲長整數字符串」。我怎樣才能解決這個問題?

+2

題外話,但調用爲了得到一個字符串,'Time.new'三次是每月最後一天的每個午夜的一個潛在錯誤。 – steenslag

回答

4

或者您可以使用正確的工具進行作業:時間格式化。

Time.new.strftime "Time is %m/%d/%Y" # => "Time is 11/13/2012" 
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") 
3

紅寶石只能加串來串,所以需要轉換。作爲一個說明,在雙引號字符串插值的元素都將自動轉換:

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

它也可以將它們從一個陣列,他們也自動轉換結合起來:

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

您還可以使用sprintf樣式插值:

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

第二個讓您更好地控制格式。例如%02d將用0填充到兩個地方。

正如塞爾吉奧指出的那樣,這種格式有一個特殊用途的功能,這可能是一個更好的主意。另外Time.now現在的的傳統方法,而Time.new用於創建任意時間。

1

只要有可能,優先選擇字符串插值而不是連接。正如您可以清楚看到的那樣(thread),使用字符串插值將自動爲您調用to_s

使用字符串插值:

「時間是#{} Time.new.month /#{} Time.new.day /#{} Time.new.year」