1

我正在计算hh:mm:ss.SSS格式的时差

DateTime dt1;
DateTime dt2;
Period period;
final DateTimeFormatter format = DateTimeFormat.forPattern("HH:mm:ss.SSS");

String endTime = "20:03:56.287";
String startTime = "19:59:27.322";
dt1 = format.parseDateTime(endTime);
dt2 = format.parseDateTime(startTime);
period = new Period(dt1,dt2);
System.out.println(period);

我得到PT-4M-28.965S
了如何将其转换为00:04:28.965

4

3 回答 3

2

Period格式化由PeriodFormatter类执行:

PeriodFormatter formatter = new PeriodFormatterBuilder().printZeroAlways()
                .appendHours().appendSeparator(":").appendMinutes()
                .appendSeparator(":").appendSeconds().appendSeparator(".")
                .appendMillis3Digit().toFormatter();
String dateString = formatter.print(period.normalizedStandard());

但这dateString将具有值 as 0:-4:-28.-965,因为您已将您的定义period为:

String endTime = "20:03:56.287";
String startTime = "19:59:27.322";
dt1 = format.parseDateTime(endTime);
dt2 = format.parseDateTime(startTime);
period = new Period(dt1, dt2);

其中 的值dt1大于,dt2等等。要获得所需的结果,您需要将参数的顺序更改为:-mm:ss:SSSperiod

period = new Period(dt2, dt1);

有了这个,上面PeriodFormatter将返回你0:4:28.965

于 2013-10-11T13:08:52.030 回答
1

你将不得不定义一个PeriodFormatterBuilder这样的:

DateTime dt1;
DateTime dt2;
Period period;
final DateTimeFormatter format = DateTimeFormat.forPattern("HH:mm:ss.SSS");

String endTime = "20:03:56.287";
String startTime = "19:59:27.322";
dt1 = format.parseDateTime(endTime);
dt2 = format.parseDateTime(startTime);
period = new Period(dt1,dt2);

PeriodFormatter fmt = new PeriodFormatterBuilder()
  .appendHours()
  .appendSeparator(":")
  .appendMinutes()
  .appendSeparator(":")
  .appendSeconds()
  .appendSeparator(".")
  .appendMillis3Digit()
  .toFormatter();

System.out.println(fmt.print(period.normalizedStandard()));
于 2013-10-11T12:43:00.417 回答
0

也许它是一个值Period.toString() Try using eg getHours()和其他getXXX()方法来提取值。

这是一个更好的答案:Period to string

于 2013-10-11T12:40:48.570 回答