Calendar
を使用すると、当日の週、年、およびすべての詳細を取得できます。その週の特定の日に移動するにはどうすればよいですか?
たとえば、calendar.get(Calendar.DAY_OF_WEEK);
は3を返します。これは火曜日を意味します。さて、その週の金曜日、またはその週の他の日についてお話ししたいと思います。どうやってやるの?
お返事ありがとうございます。シナリオをもっと明確にする必要があると思います。基本的に、私は指定された期間中、システムで電子メールアラートを無効にしようとしています。次のような値を取得します。disableStart = "FRIDAY-19:00" disableEnd = "SUNDAY-19:00"
ここで、特定の時間に電子メールを送信する必要があるかどうかを確認する必要があります。例えば今日=木曜日ならいつでもメールを送信できますが、今日=土曜日ならいつでも上記の値に従って送信できません。
私が正しく理解していれば、Calendar.set(Field、value)メソッドを使用できます。
SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy");
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(f.format(c.getTime()));
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(f.format(c.getTime()));
出力を生成します
6
08-10-2010
3
05-10-2010
Calendar c = Calendar.getInstance();
Date date = new Date();
c.setTime(date);
System.out.println("Today: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println("MONDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
System.out.println("TUESDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
System.out.println("WEDNESDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
System.out.println("THURSDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
System.out.println("FRIDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
System.out.println("SATURDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
System.out.println("SUNDAY: " + c.getTime());
与える:
Today: Fri Oct 08 15:45:14 CEST 2010
MONDAY: Mon Oct 04 15:45:14 CEST 2010
TUESDAY: Tue Oct 05 15:45:14 CEST 2010
WEDNESDAY: Wed Oct 06 15:45:14 CEST 2010
THURSDAY: Thu Oct 07 15:45:14 CEST 2010
FRIDAY: Fri Oct 08 15:45:14 CEST 2010
SATURDAY: Sat Oct 09 15:45:14 CEST 2010
SUNDAY: Sun Oct 10 15:45:14 CEST 2010
つまり、少なくとも私のシステムでは、週は月曜日に始まります。
答えをくれたケビンとモーリスに感謝します。彼らは本当に私に出発点を与えました。
誰かを助けるために、私はこのテストコードで終わりました。
private static Date getTimeForAnyDayInWeek(int nDay, int nHour, int nMin)
{
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
Date date = Calendar.getInstance().getTime();
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, nDay);
c.set(Calendar.HOUR_OF_DAY, nHour);
c.set(Calendar.MINUTE, nMin);
return c.getTime();
}
public static void main(String[] args)
{
Date start = getTimeForAnyDayInWeek(6, 19, 00);
Date end = getTimeForAnyDayInWeek(8, 19, 00);
Date c = new Date();
if (start.before(c) && c.before(end))
System.out.println("BLOCK");
else
System.out.println("SEND");
}
ありがとう、Anubhav
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
これは jodatime がとても良い理由の完璧な例です、これが私の類似のコードです
DateTime dt = new DateTime(); //current datetime, jodatime format
DateTime fridayLastWeek = dt.minusWeeks(1).dayOfWeek().setCopy("Friday");
Date convertedtorubbishdateformat = fridayLastWeek.toDate();
以前は標準のJava日付/カレンダーを使用していたので、多くの時間を浪費していました。それから私はjodatimeを手に入れました、あなたは後悔しません、それは明らかに標準Javaの一部として将来使用されるでしょう。私は何年もの間瓶をひどく悩ませませんでした、私がやっていたら良かったのですが、あなたはそれを後悔しません。