こんにちは、日、週番号がパラメーターである Java でプログラムを作成したいと考えています。
質問する
4370 次
4 に答える
5
Apache Commons / LangDateUtils
から使用して、それを行うユーティリティメソッドを次に示します。
/**
* Get the n-th x-day of the month in which the specified date lies.
* @param input the specified date
* @param weeks 1-based offset (e.g. 1 means 1st week)
* @param targetWeekDay (the weekday we're looking for, e.g. Calendar.MONDAY
* @return the target date
*/
public static Date getNthXdayInMonth(final Date input,
final int weeks,
final int targetWeekDay){
// strip all date fields below month
final Date startOfMonth = DateUtils.truncate(input, Calendar.MONTH);
final Calendar cal = Calendar.getInstance();
cal.setTime(startOfMonth);
final int weekDay = cal.get(Calendar.DAY_OF_WEEK);
final int modifier = (weeks - 1) * 7 + (targetWeekDay - weekDay);
return modifier > 0
? DateUtils.addDays(startOfMonth, modifier)
: startOfMonth;
}
テストコード:
// Get this month's third thursday
System.out.println(getNthXdayInMonth(new Date(), 3, Calendar.THURSDAY));
// Get next month's second wednesday:
System.out.println(getNthXdayInMonth(DateUtils.addMonths(new Date(), 1),
2,
Calendar.WEDNESDAY)
);
出力:
2010 年 11 月 18 日木曜日 00:00:00 CET 2010 年
12 月 8 日水曜日 00:00:00 CET
そして、これが同じコードのJodaTimeバージョンです (私は以前に JodaTime を使用したことがないので、おそらくもっと簡単な方法があるでしょう):
/**
* Get the n-th x-day of the month in which the specified date lies.
*
* @param input
* the specified date
* @param weeks
* 1-based offset (e.g. 1 means 1st week)
* @param targetWeekDay
* (the weekday we're looking for, e.g. DateTimeConstants.MONDAY
* @return the target date
*/
public static DateTime getNthXdayInMonthUsingJodaTime(final DateTime input,
final int weeks,
final int targetWeekDay){
final DateTime startOfMonth =
input.withDayOfMonth(1).withMillisOfDay(0);
final int weekDay = startOfMonth.getDayOfWeek();
final int modifier = (weeks - 1) * 7 + (targetWeekDay - weekDay);
return modifier > 0 ? startOfMonth.plusDays(modifier) : startOfMonth;
}
テストコード:
// Get this month's third thursday
System.out.println(getNthXdayInMonthUsingJodaTime(new DateTime(),
3,
DateTimeConstants.THURSDAY));
// Get next month's second wednesday:
System.out.println(getNthXdayInMonthUsingJodaTime(new DateTime().plusMonths(1),
2,
DateTimeConstants.WEDNESDAY));
出力:
2010-11-18T00:00:00.000+01:00
2010-12-08T00:00:00.000+01:00
于 2010-11-09T09:21:40.793 に答える
2
public static Date getDate(int day, int weekNo, int month, int year) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE,1);
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
for (int i = 0; i < 31; i++) {
if (cal.get(Calendar.WEEK_OF_MONTH) == weekNo
&& cal.get(Calendar.DAY_OF_WEEK) == day) {
return cal.getTime();
}
cal.add(Calendar.DATE,1);
}
return null;
}
呼び出しコード
System.out.println(""+getDate(Calendar.MONDAY, 2, Calendar.DECEMBER,2010));
出力
Mon Dec 06 15:09:00 IST 2010
于 2010-11-09T08:13:39.700 に答える
-1
Calendar cal = Calendar.getInstance();
int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
これはあなたが望むことをするはずです。
編集:さらにいくつかの計算手順を使用すると、結果が得られる可能性があります:)(タイトルを混乱させて申し訳ありません)
于 2010-11-09T08:11:14.370 に答える