XML serialization does not include milliseconds in the datetime field from the Rails model

By default, the datetime field from the database is converted and deletes milliseconds:

some_datetime => "2009-11-11T02: 19: 36Z"

attribute_before_type_cast ('some_datetime') => "2009-11-11 02:19: 36.145"

If I try to override the accessor for this attribute, for example:

def some_datetime
  attribute_before_type_cast('some_datetime')
end

when I try to use "to_xml" for this model, I get the following error:

NoMethodError method (undefined`xmlschema 'for "2009-11-11 02:19: 36,145": String):

I tried to parse a String to Time object, but I can't get it to turn on milliseconds;

  def some_datetime
    Time.parse(attribute_before_type_cast('some_datetime').sub(/\s/,"T").sub(/$/,"Z"))
  end

Can someone help get a datetime with milliseconds represented by to_xml?

+1
2

, datetime , , , datetime to_xml. , . datetime?

"" , , , "" , .

  def to_xml(options = {})
    options[:methods] = [:some_datetime]
    options[:except] = [:some_datetime]
    super
  end

  def some_datetime
    attribute_before_type_cast('some_datetime')
  end

to_xml , .

0

Ruby " ".

Ruby ( Rails) :

irb:

""
  = > true
  dt = Time.now
  = > 2010-05-31 17:18:39 +0100
  Time.parse(dt.to_s) == dt
  = > false!?!?!?!?
  dt.to_s (: )
  ArgumentError: (1 0)
           (irb): 5: in to_s'
from (irb):5
from C:/Ruby19/bin/irb:12:in
'

ok Rails:

sqlserver_test/development?: dt2 = Time.zone.now
  = > , 31 2010 17:24:54 CEST +02: 00
  sqlserver_test/: dt2.class
  = > ActiveSupport:: TimeWithZone
  sqlserver_test/development: Time.zone.parse(dt2.to_s) == dt2
  = > false
  sqlserver_test/development: dt2.to_s (: db)
  = > "2010-05-31 15:24:54"
  sqlserver_test/development: dt2.to_s (: iso8601)
  = > "2010-05-31 17:24:54 +0200"
  sqlserver_test/development: dt2.to_s (: iso8601) == dt2.iso8601
  = > false

( Ruby 1.9.1 Rails 2.3.5 Windows Xp)

"" DateTime ...

0

All Articles