Report abuse


			
=item xs_duration_to_seconds

Convert the time part of xs:duration format to seconds.


This should be fairly quick and robust - only handles the time part of the spec (ignores the rest!).

some examples of times correctly understood:

  PT10H0M0S      => 36000
  PT10H0M        => 36000
  PT10H5M        => 36300
  PT10H0M5S      => 36005
  PT10H04M16S    => 36256
  Pstuff0xT10H5M => 36300

See also the full spec for this datatype: http://www.w3.org/TR/xmlschema-2/#duration

=cut
sub xs_duration_to_seconds {
  my $self = shift;
  my $xsd  = shift;

  # strip P..T from the string
  $xsd =~ s{ ^ P [^T]* T }{}x;

  my $secs = 0;

  while( $xsd =~ m{ (\d+) (\D) }gx ) {
    last unless defined($1) and $2;

    $secs += 3600 * $1 if $2 eq 'H';
    $secs += 60   * $1 if $2 eq 'M';
    $secs += 1    * $1 if $2 eq 'S';
  }

  $secs;
}