2016-10-04 4 views
0

형식은 ISO8601 형식이어야합니다. https://en.wikipedia.org/wiki/ISO_8601#Durations.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- I는 시간의 태그 값 MsProject 통지 항상 그러나 적어도 "H, M 및 S"(실시 예와 ISO8601 형태의 지속 시간 값을 가질 것으로 기대 : 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; 
}