JavaでString型のISO 8601文字列を整形したい｡


YouTube Data APIで得られる動画の再生時間はISO 8601形式に従って`PT#M#S`という`String`型のデータで返されます｡
そこで質問なのですが表示する上でJavaを使ってこの文字列を`hh:MM:ss`という形式に変換したいと考えています｡そこで何か簡単な方法はありますでしょうか｡

よろしくおねがいします｡

**追記:**

YouTube Data
APIの[リソース表現](https://developers.google.com/youtube/v3/docs/videos?hl=ja#resource)です｡
再生時間は`contentDetails`の`duration`という項目です｡




自分でパースしてもいいぐらいに簡単なフォーマットではありますが、きちんとしたものがほしければ、 [Joda-
Time](http://www.joda.org/joda-time/index.html) に良いパーサ (
[ISOPeriodFormat](http://joda-
time.sourceforge.net/apidocs/org/joda/time/format/ISOPeriodFormat.html) )
が含まれています。

_PT_M_S.java:_

[code]

    public class PT_M_S {
    
        public static void main( String[] args) {
            final PeriodFormatter parser = ISOPeriodFormat.standard();
            final PeriodFormatter fmt = new PeriodFormatterBuilder()
                .printZeroAlways().minimumPrintedDigits(2).appendHours().appendSeparator(":")
                .printZeroAlways().minimumPrintedDigits(2).appendMinutes().appendSeparator(":")
                .printZeroAlways().minimumPrintedDigits(2).appendSeconds().toFormatter();
    
            final Period pt10m30s = parser.parsePeriod( "PT10M30S");
            final Period pt1m2s = parser.parsePeriod( "PT1M2S");
            final Period pt1h2m3s = parser.parsePeriod( "PT01H2M3S");
    
            System.out.println(pt10m30s + 
                " = " + pt10m30s.toStandardSeconds() + 
                " = " + pt10m30s.toStandardDuration().getMillis() +
                " = " + fmt.print( pt10m30s));
    
            System.out.println(pt1m2s + 
                " = " + pt1m2s.toStandardSeconds() + 
                " = " + pt1m2s.toStandardDuration().getMillis() +
                " = " + fmt.print( pt1m2s));
    
            System.out.println(pt1h2m3s + 
                " = " + pt1h2m3s.toStandardSeconds() + 
                " = " + pt1h2m3s.toStandardDuration().getMillis() +
                " = " + fmt.print( pt1h2m3s));
        }
    
    }
    
[/code]

_Output:_

[code]

    PT10M30S = PT630S = 630000 = 00:10:30
    PT1M2S = PT62S = 62000 = 00:01:02
    PT1H2M3S = PT3723S = 3723000 = 01:02:03
    
[/code]




自分でパースしてもいいぐらいに簡単なフォーマットではありますが、きちんとしたものがほしければ、 [Joda-
Time](http://www.joda.org/joda-time/index.html) に良いパーサ (
[ISOPeriodFormat](http://joda-
time.sourceforge.net/apidocs/org/joda/time/format/ISOPeriodFormat.html) )
が含まれています。

_PT_M_S.java:_

[code]

    public class PT_M_S {
    
        public static void main( String[] args) {
            final PeriodFormatter parser = ISOPeriodFormat.standard();
            final PeriodFormatter fmt = new PeriodFormatterBuilder()
                .printZeroAlways().minimumPrintedDigits(2).appendHours().appendSeparator(":")
                .printZeroAlways().minimumPrintedDigits(2).appendMinutes().appendSeparator(":")
                .printZeroAlways().minimumPrintedDigits(2).appendSeconds().toFormatter();
    
            final Period pt10m30s = parser.parsePeriod( "PT10M30S");
            final Period pt1m2s = parser.parsePeriod( "PT1M2S");
            final Period pt1h2m3s = parser.parsePeriod( "PT01H2M3S");
    
            System.out.println(pt10m30s + 
                " = " + pt10m30s.toStandardSeconds() + 
                " = " + pt10m30s.toStandardDuration().getMillis() +
                " = " + fmt.print( pt10m30s));
    
            System.out.println(pt1m2s + 
                " = " + pt1m2s.toStandardSeconds() + 
                " = " + pt1m2s.toStandardDuration().getMillis() +
                " = " + fmt.print( pt1m2s));
    
            System.out.println(pt1h2m3s + 
                " = " + pt1h2m3s.toStandardSeconds() + 
                " = " + pt1h2m3s.toStandardDuration().getMillis() +
                " = " + fmt.print( pt1h2m3s));
        }
    
    }
    
[/code]

_Output:_

[code]

    PT10M30S = PT630S = 630000 = 00:10:30
    PT1M2S = PT62S = 62000 = 00:01:02
    PT1H2M3S = PT3723S = 3723000 = 01:02:03
    
[/code]

