class XSD::XSDDateTime
Constants
- Type
Public Class Methods
new(value = nil)
click to toggle source
# File lib/xsd/datatypes.rb, line 606 def initialize(value = nil) init(Type, value) end
Private Instance Methods
_set(data)
click to toggle source
# File lib/xsd/datatypes.rb, line 641 def _set(data) if data.nil? @data = @secfrac = nil return end @data, @secfrac = data end
_to_s()
click to toggle source
# File lib/xsd/datatypes.rb, line 649 def _to_s year = (@data.year > 0) ? @data.year : @data.year - 1 s = format('%.4d-%02d-%02dT%02d:%02d:%02d', year, @data.mon, @data.mday, @data.hour, @data.min, @data.sec) if @data.sec_fraction.nonzero? if @secfrac s << ".#{ @secfrac }" else s << sprintf("%.16f", (@data.sec_fraction * DayInSec).to_f).sub(/^0/, '').sub(/0*$/, '') end end add_tz(s) end
screen_data_str(t)
click to toggle source
# File lib/xsd/datatypes.rb, line 612 def screen_data_str(t) /^([+\-]?\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip unless Regexp.last_match raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.") end if $1 == '0000' raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.") end year = $1.to_i if year < 0 year += 1 end mon = $2.to_i mday = $3.to_i hour = $4.to_i min = $5.to_i sec = $6.to_i secfrac = $7 zonestr = $8 data = DateTime.civil(year, mon, mday, hour, min, sec, tz2of(zonestr)) if secfrac diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / DayInSec data += diffday # FYI: new0 and jd_to_rjd are not necessary to use if you don't have # exceptional reason. end [data, secfrac] end