1

[ウェブページから受け取った]時差を解析しているときに混乱しています。

例:次のような文字列を取得します2 years 10 weeks 3 days 6 hours 7 min agos末尾のyearweekdayおよびhourは、単一の場合には存在せず、 に存在しない場合があることに注意してくださいmin

現在、私はそのように保存された差を取得し、実際の日付と時刻を取得したいと考えています[現在の時刻から減算することによって?]。

で、どうしようか迷ってます。時間の解析方法については知っていますが、それは通常の時間ではありません。さらに、その末尾がありますs!!!

誰かがこれに対する良いアプローチを提案できますか?

4

3 に答える 3

0

@Eluvatar の提案を使用して、各部分の間にスペースを想定します。

Calendar cal = Calendar.getInstance();
String original = "2 years 10 weeks 3 days 6 hours 7 min ago";

// Split on whitespace separators ("\s+" means "one or more whitespace characters"),
// having trimmed whitespace at beginning and end.
String[] split = original.trim().split("\s+");

// Now parse each entry
int num = split.length;
int pos = 0;
while ((num-pos) >= 2) {
    if (split[pos].regionMatches(true, 0, "year", 0, 4)) {
          cal.add(Calendar.YEAR, -Integer.decode(split[++pos]));
    }
    else if (split[pos].regionMatches(true, 0, "month", 0, 5)) {
          cal.add(Calendar.MONTH, -Integer.decode(split[++pos]));
    }
    else if (split[pos].regionMatches(true, 0, "week", 0, 4)) {
          cal.add(Calendar.WEEK_OF_YEAR, -Integer.decode(split[++pos]));
    }
    // And so on through the other potential values, note that the last
    // number in regionMatches is the number of characters to match.

    pos++;
}

「\s+」を「\s+」にする必要がある場合があります。区切り文字として空白文字を使用して文字列を分割するにはどうすればよいですか? を参照してください。.

于 2013-07-08T20:06:15.763 に答える
0

差がミリ秒単位でどれくらいの時間を計算し、それを今から差し引くことをお勧めします。これは簡単ですが、うるう年の問題に遭遇します。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -2);
cal.add(Calendar.WEEK_OF_YEAR, -10);
cal.add(Calendar.DAY_OF_YEAR, -3);
cal.add(Calendar.HOUR_OF_DAY, -6);
cal.add(Calendar.MINUTE, -7);

それはうまくいくはずですが、私はそれをテストしていません。たとえば、週の値が得られない場合にも対処する必要があります。

于 2013-07-08T18:00:14.420 に答える