2012-03-26 14 views
0

"Thu"や "Thursday"のような単純な日であるStringを指定すると、今日のStringに最も近いStringを表すjava.util.Calendarオブジェクトをどのように取得できますか?言い換えれば、今日は2912年3月26日の月曜日なので、Stringが "Thu"の場合は、 "3/29/2012"を表す日付を作成したいと考えています。渡された文字列が "Mon"で月曜日にある場合は、今日の日付が必要です。この例では、「3/26/2012」です。私は唯一の曜日名を持つ日付を解析するには?

私は

  final DateFormat formatter = new SimpleDateFormat("EEE"); 
      java.util.Date date = (Date) formatter.parse(dayOfWeekStr); 
      final Calendar now = Calendar.getInstance(); 
      dateCal.set(Calendar.YEAR, now.get(Calendar.YEAR)); 
      dateCal.set(Calendar.MONTH, now.get(Calendar.MONTH)); 
      dateCal.setTime(date); 

...これを試してみましたが、それは動作しません。日付を設定すると、年と月の結果は1970年1月になります。

+0

コードにdateCalという名前の変数がありません。 – jahroy

+0

私はあなたが最も近い未来の日付を望むと思います。 – biziclop

答えて

0

私は、誰もがより簡潔な解決策を持っている場合は、私が代わりにそれを受け入れるだろう

public static Calendar getNearestDateFromDayString(final String dayOfWeekStr, 
     final Calendar startingDay) throws ParseException { 
    final DateFormat formatter = new SimpleDateFormat("EEE"); 
    final java.util.Date date = (Date) formatter.parse(dayOfWeekStr); 
    final Calendar result = Calendar.getInstance(); 
    result.setTime(date); 
    result.set(Calendar.YEAR, startingDay.get(Calendar.YEAR)); 
    result.set(Calendar.MONTH, startingDay.get(Calendar.MONTH)); 
    result.set(Calendar.HOUR, startingDay.get(Calendar.HOUR)); 
    result.set(Calendar.MINUTE, startingDay.get(Calendar.MINUTE)); 
    result.set(Calendar.SECOND, 0); 
    java.util.Date today = new java.util.Date(); 
    while (result.getTimeInMillis() <= today.getTime()) { 
     result.add(Calendar.DATE, 7); 
    } // while 
    return result; 
} // getNearestDateFromDayString 

一緒に行くことになりました。

2

あなたはほとんどそこにいます。残りの部分の上に.setTime(..)を入れてください。現在は、時間を設定してYEARとMONTHの変更を上書きしています。

ケビンが指摘したように、すべてのケースで機能しない可能性があります。そのため、別のアプローチを使用することをお勧めします。パースされた日付に基づいて、DAY_OF_WEEKのみをカレンダーから取得し、nowに設定します。もちろん、必要に応じて週を変更する必要があります。

+1

私は月にも週が必要だと思います。また、必要な丸め方式のロジックを記述する必要があります(上、下[デフォルト]、一番近い)。 – kevingallagher

+0

ヘイボゾー、それは動作しません。 setTimeを先頭に移動するだけで、今年の今月の最初の金曜日を設定することができます(入力文字列が「金」だった場合)。私が欲しいのは、今度の金曜日です。今日が今日と同じなら、今日です。 – Dave

+0

ケビンによって提案されているように、WEEKも同様に設定して、もう少し計算する必要があります。 – Bozho

関連する問題