如何将时间从PT-4M-28.965S转换为00:04:28.965

时间:2013-10-11 12:25:10

标签: java time jodatime

我正在计算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

3 个答案:

答案 0 :(得分:2)

Period格式由PeriodFormatter类执行:

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

但是此dateString的值为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:SSS大于period。要获得所需的结果,您需要将参数的顺序更改为period = new Period(dt2, dt1);

PeriodFormatter

并且上述0:4:28.965将返回{{1}}。

答案 1 :(得分: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()));

答案 2 :(得分:0)

也许这是Period.toString()的值 尝试使用例如getHours()和其他getXXX()方法来提取值。

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