Class: RDF::Literal::Time
- Inherits:
-
Temporal
- Object
- RDF::Literal
- Temporal
- RDF::Literal::Time
- Defined in:
- lib/rdf/model/literal/time.rb
Overview
A time literal.
The lexical representation for time is the left truncated lexical representation for xsd:dateTime
: “hh:mm:ss.sss” with an optional following time zone indicator.
Constant Summary collapse
- DATATYPE =
RDF::URI("http://www.w3.org/2001/XMLSchema#time")
- GRAMMAR =
%r(\A((?:#{HOURFRAG}:#{MINUTEFRAG}:#{SECONDFRAG})|#{EODFRAG})(#{TZFRAG})?\z).freeze
- FORMAT =
'%H:%M:%S.%L'.freeze
Constants inherited from Temporal
RDF::Literal::Temporal::DAYFRAG, RDF::Literal::Temporal::EODFRAG, RDF::Literal::Temporal::HOURFRAG, RDF::Literal::Temporal::MINUTEFRAG, RDF::Literal::Temporal::MONTHFRAG, RDF::Literal::Temporal::SECONDFRAG, RDF::Literal::Temporal::TZFRAG, RDF::Literal::Temporal::YEARFRAG, RDF::Literal::Temporal::ZONE_GRAMMAR
Constants inherited from RDF::Literal
FALSE, TRUE, XSD_STRING, ZERO
Instance Attribute Summary
Attributes inherited from RDF::Literal
#datatype, #direction, #language
Instance Method Summary collapse
-
#humanize(lang = :en) ⇒ String
Returns a human-readable value for the literal.
-
#initialize(value, datatype: nil, lexical: nil, **options) ⇒ Time
constructor
Internally, a
DateTime
is represented using a native::DateTime
.
Methods inherited from Temporal
#+, #-, #<=>, #==, #adjust_to_timezone, #adjust_to_timezone!, #canonicalize!, #day, #hours, #milliseconds?, #minutes, #month, #seconds, #timezone, #timezone?, #to_s, #tz, #valid?, #year
Methods inherited from RDF::Literal
#<=>, #==, #canonicalize!, #compatible?, #comperable_datatype2?, #comperable_datatype?, #datatype?, #direction?, #english?, #eql?, #escape, #hash, #inspect, #language?, #literal?, #method_missing, #object, #plain?, #respond_to_missing?, #simple?, #squish, #squish!, #to_s, #valid?, #validate!, #value, #value_hash
Methods included from Term
#<=>, #==, #compatible?, #eql?, #escape, #term?, #terms, #to_base, #to_term
Methods included from Value
#anonymous?, #canonicalize, #canonicalize!, #constant?, #graph?, #inspect, #inspect!, #invalid?, #iri?, #list?, #literal?, #node?, #resource?, #start_with?, #statement?, #term?, #to_nquads, #to_ntriples, #to_rdf, #to_term, #type_error, #uri?, #valid?, #validate!, #variable?
Constructor Details
#initialize(value, datatype: nil, lexical: nil, **options) ⇒ Time
Internally, a DateTime
is represented using a native ::DateTime
. If initialized from a ::DateTime
, the timezone is taken from that native object, otherwise, a timezone (or no timezone) is taken from the string representation having a matching zzzzzz
component.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/rdf/model/literal/time.rb', line 23 def initialize(value, datatype: nil, lexical: nil, **) @datatype = RDF::URI(datatype || self.class.const_get(:DATATYPE)) @string = lexical || (value if value.is_a?(String)) @object = case when value.respond_to?(:to_datetime) dt = value.to_datetime @zone = dt.zone # Normalize to 1972-12-31 dateTime base hms = dt.strftime(FORMAT) ::DateTime.parse("1972-12-31T#{hms}#{@zone}") else md = value.to_s.match(GRAMMAR) _, tm, tz = Array(md) if tz @zone = tz == 'Z' ? '+00:00' : tz else @zone = nil # No timezone end # Normalize 24:00:00 to 00:00:00 hr, mi, se = tm.split(':') if hr.to_i > 23 hr = "%.2i" % (hr.to_i % 24) @string = nil end value = "#{hr}:#{mi}:#{se}" # Normalize to 1972-12-31 dateTime base ::DateTime.parse("1972-12-31T#{hr}:#{mi}:#{se}#{@zone}") end rescue ::DateTime.new end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class RDF::Literal
Instance Method Details
#humanize(lang = :en) ⇒ String
Returns a human-readable value for the literal
58 59 60 61 62 63 64 65 |
# File 'lib/rdf/model/literal/time.rb', line 58 def humanize(lang = :en) t = object.strftime("%r") if timezone? z = @zone == '+00:00' ? "UTC" : @zone t += " #{z}" end t end |