iso8601-basic

A very basic implementation of the ISO8601 spec

gem 'iso8601-basic', require 'iso8601'

Joining date/time parts:

date = ISO8601Basic::Date.new '2010-01-01' # => #<ISO8601Basic::Date: 2010-01-01>
time = ISO8601Basic::Time.new '10:30'      # => #<ISO8601Basic::Time: T10:30:00+00:00>

date + time # => #<ISO8601Basic::DateTime: 2010-01-01T10:30:00+00:00>

Working with durations:

When working with times:

duration = ISO8601Basic::Duration.new 'PT1H' # => #<ISO8601Basic::Duration: PT1H>
time     = ISO8601Basic::Time.new '10:30'    # => #<ISO8601Basic::Time: T10:30:00+00:00>

time + duration # => #<ISO8601Basic::Time: T11:30:00+00:00>

And with dates:

duration = ISO8601Basic::Duration.new 'P1D'    # => #<ISO8601Basic::Duration: P1D>
date     = ISO8601Basic::Date.new '2010-01-01' # => #<ISO8601Basic::Date: 2010-01-01>

date + duration # => #<ISO8601Basic::Time: 2010-01-02>

All together now:

duration  = ISO8601Basic::Duration.new 'P1DT1H'           # => #<ISO8601Basic::Duration: P1DT1H>
date_time = ISO8601Basic::DateTime.new '2010-01-01T10:30' # => #<ISO8601Basic::DateTime: 2010-01-01T10:30:00+00:00>

date_time + duration # => #<ISO8601Basic::DateTime: 2010-01-02T11:30:00+00:00>