2

次のような文字列があります: "n YEARS n MONTHS n WEEKS n DAYS"(定数は複数形である場合とそうでない場合があることに注意してください)

これをJodaPeriodオブジェクトまたはISO8601形式の文字列(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;
4

1 に答える 1

5

joda time APIのPeriodFormatterBuilderを使用して、フォーマットを解析するインスタンスを構築できます。複数の定数の処理もあります。

于 2013-01-03T12:14:50.250 に答える