2016-10-04 2 views
0

形式はISO8601の形式にする必要があります。 。Java getDuration(2.5d、TimeUnitType.Hour)戻り値の形式はISO8601になりません

例:

double dur = 1442.7; //hrs 
java.time.Duration d = java.time.Duration.ofMinutes((long)dur.convert(0).toDouble()); 
System.out.println(d.toString()); //// **1- issue of truncate real number ???** 

2-私は時間のタグ値のMsProjectは常にISO8601形式の期間値を有することが期待気づくが、少なくとも「H、M及びS」との(例:PT4H0M0S )この場合、Java.time.DurationはMsProjectには有効でない "PT4H"を返します。これは私が私が期待したものに何も持たない姿を私に与えます。 ????

答えて

0

あり、これを行うには、組み込みの方法はありませんが、あなたはthis answerでコードを適応させることによって、手動でフォーマットすることができます。

public static void main(String[] args) { 
    double dur = 1442.7; //hrs 
    java.time.Duration d = java.time.Duration.ofMinutes((long) dur); 
    System.out.println(format(d)); //PT24H2M0S 
} 

public static String format(java.time.Duration duration) { 
    long seconds = duration.getSeconds(); 
    long absSeconds = Math.abs(seconds); 
    String positive = String.format(
      "PT%dH%dM%dS", 
      absSeconds/3600, 
      (absSeconds % 3600)/60, 
      absSeconds % 60); 
    return seconds < 0 ? "-" + positive : positive; 
} 
関連する問題