将普通语言持续时间转换为Joda Period或ISO 8601

时间:2013-01-03 11:53:11

标签: java jodatime

我有一个看起来像这样的字符串:“n n n n n n n n n ns ns周期”(注意常数可能会也可能不会复数)

我需要将它转换为Joda Period对象或ISO 8601格式的String(可以转换为Period对象)。

有没有人有任何代码,或者他们可以指我到图书馆这样做吗?

更新:如果有人需要这样做,这是工作代码。不幸的是,我必须动态构建PeriodFormatterBuilder,因为字段是可选的。有点难看,但它确实有效。

Update2 :修复了评论中指出的错误。

String text = expr1a.getText();
System.out.println(text);

PeriodFormatterBuilder pfb = new PeriodFormatterBuilder().printZeroAlways();

int yearIndex = text.indexOf("YEAR");
int monthIndex = text.indexOf("MONTH");
int weekIndex = text.indexOf("WEEK");
int dayIndex = text.indexOf("DAY");

if (yearIndex > -1) {
  pfb = pfb.appendYears().appendSuffix(" YEAR"," YEARS");
}

if (monthIndex > -1) {
  if (yearIndex > -1) {
    pfb = pfb.appendPrefix(" ").appendMonths().appendSuffix(" MONTH", " MONTHS");
  } else {
    pfb = pfb.appendMonths().appendSuffix(" MONTH", " MONTHS");
  }
} 

if (weekIndex > -1) {
  if (yearIndex > -1 || monthIndex > -1) {
    pfb = pfb.appendPrefix(" ").appendWeeks().appendSuffix(" WEEK", " WEEKS");
  } else {
    pfb = pfb.appendWeeks().appendSuffix(" WEEK", " WEEKS");
  }
}

if (dayIndex > -1) {
  if (yearIndex > -1 || monthIndex > -1 || weekIndex > -1) {
     pfb = pfb.appendPrefix(" ").appendDays().appendSuffix(" DAY"," DAYS");
  } else {
    pfb = pfb.appendDays().appendSuffix(" DAY"," DAYS");
  }
}

PeriodFormatter pf = pfb.toFormatter();

Period period = Period.parse(text, pf);
return period;

1 个答案:

答案 0 :(得分:5)

您可以使用joda time API的PeriodFormatterBuilder来构建一个解析您的格式的实例。还有plurals常量的处理。