2016-10-04 46 views
0

我需要格式为ISO8601的持续时间。 https://en.wikipedia.org/wiki/ISO_8601#DurationsJava 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返回“PT4H”,这对于MsProject无效,这给了我一个数字,我们没有预料到什么。 ????

回答

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; 
} 
相关问题