4

時間間隔(年齢)をテキストに変換する簡単な方法はありますか? たとえば、年齢は 25.45 歳です。「 25年3ヶ月1日」に換算する必要があります。質問は数字の 25、3、1 についてではなく、正しい形式 (複数形、曲用形) を使用して異なる言語に年/月/日を翻訳する方法です。英語はハードコードするのが簡単なようですが、そうでない言語もあるので、一般的な解決策を好むでしょう。

数字 / 英語 / チェコ語 / ...
1 / 日 / デン
2 / 日 / dny
5 / 日 / dnů
...

4

2 に答える 2

4

Joda time はそれをかなり簡単に行います。

例えば:

public static void main(String[] args) {
  PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
    .appendDays()
    .appendSuffix(" day", " days")
    .appendSeparator(" and ")
    .appendMinutes()
    .appendSuffix(" minute", " minutes")
    .appendSeparator(" and ")
    .appendSeconds()
    .appendSuffix(" second", " seconds")
    .toFormatter();

  Period period = new Period(72, 24, 12, 0);

  System.out.println(daysHoursMinutes.print(period));
  System.out.println(daysHoursMinutes.print(period.normalizedStandard()));
}

印刷します:

24 minutes and 12 seconds
3 days and 24 minutes and 12 seconds

参照:ピリオドから文字列へ

于 2013-02-04T18:38:05.813 に答える
3

JodaTime は、ほとんどのフォーマッターでこれを行うことができます。 例としての javadoc を見てください。PeriodFormat

それは言います:

Controls the printing and parsing of a time period to and from a string.

This class is the main API for printing and parsing used by most applications. Instances of this class are created via one of three factory classes:

PeriodFormat - formats by pattern and style
ISOPeriodFormat - ISO8601 formats
PeriodFormatterBuilder - complex formats created via method calls
An instance of this class holds a reference internally to one printer and one parser. It is possible that one of these may be null, in which case the formatter cannot print/parse. This can be checked via the isPrinter() and isParser() methods.

The underlying printer/parser can be altered to behave exactly as required by using a decorator modifier:

withLocale(Locale) - returns a new formatter that uses the specified locale
This returns a new formatter (instances of this class are immutable).
The main methods of the class are the printXxx and parseXxx methods. These are used as follows:

 // print using the default locale
 String periodStr = formatter.print(period);
 // print using the French locale
 String periodStr = formatter.withLocale(Locale.FRENCH).print(period);

 // parse using the French locale
 Period date = formatter.withLocale(Locale.FRENCH).parsePeriod(str);
于 2013-02-04T18:37:17.503 に答える