2015-04-18 20 views
1

to_s被調用時,你如何強制Ruby的Time類使用ISO8601?強制Ruby時間等級使用ISO8601

+2

不會'需要'時間'; Time.now.iso8601#=>「2015-04-17T17:35:13-07:00」'比重新定義[Time#to_s]更好(http://ruby-doc.org/core-2.2.0/爲time.html#方法-I-to_s)? –

+0

這個'Time#to_s'在一個我無法控制的庫中調用。這個庫將在我傳遞給它的任何對象上調用'to_s'並將其保存到磁盤。我想要ISO8601在磁盤上。 – garbagecollector

+0

僅供參考,我已經完成了這個:'上課時間; def to_s; ISO8601;結束; end'。這似乎工作,但我不知道是否建議重寫'Time#to_s' – garbagecollector

回答

3

正如@DumpHole提到的,你總是可以覆蓋Time.to_s像這樣:

require 'time'  

class Time 
    def to_s 
    iso8601 
    end 
end 

但是,你可能不希望覆蓋to_s對時間的所有實例。相反,你可以創建一個自定義包裝類,並使用它:

require 'time' 

class Iso8601Time < Time 
    def to_s 
    iso8601 
    end 
end 

Iso8601Time.now.to_s #=> "2015-04-17T17:35:13-07:00"